2014-11-04 54 views
0

我想在Django 1.7.1中扩展Django用户类,删除名字和姓氏,并在电子邮件地址上添加一个唯一的约束。到目前为止,我有这个自定义模式改变的约束/字段:如何正确扩展Django用户?

class ExtUser(AbstractBaseUser, PermissionsMixin): 

    class Meta: 
     # Django 1.7.2? 
     #default_related_name = 'user' 
     db_table = 'auth_user' 
     verbose_name = _('user') 
     verbose_name_plural = _('users') 
     abstract = False 

    username = models.CharField(_('username'), max_length=30, unique=True, 
     help_text=_('Required. 30 characters or fewer. Letters, digits and ' 
        '@/./+/-/_ only.'), 
     validators=[ 
      validators.RegexValidator(r'^[\[email protected]+-]+$', _('Enter a valid username.'), 'invalid') 
     ]) 
    email = models.EmailField(_('email address'), max_length=75, blank=False, null=False, unique=True) 
    is_staff = models.BooleanField(_('staff status'), default=False, 
     help_text=_('Designates whether the user can log into this admin ' 
        'site.')) 
    is_active = models.BooleanField(_('active'), default=True, 
     help_text=_('Designates whether this user should be treated as ' 
        'active. Unselect this instead of deleting accounts.')) 
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now) 

    objects = UserManager() 

    USERNAME_FIELD = 'username' 
    REQUIRED_FIELDS = ['email'] 

    def get_short_name(self): 
     return self.username 

    def email_user(self, subject, message, from_email=None, **kwargs): 
     send_mail(subject, message, from_email, [self.email], **kwargs) 

而且我修改的设置文件:

AUTH_USER_MODEL = 'ext.ExtUser' 

我可以登录到admin界面,但是当我尝试编辑用户,我得到以下异常:

ProgrammingError at /api/extuser/1/ 
column auth_user_groups.extuser_id does not exist 
LINE 1: ...oup"."id" = "auth_user_groups"."group_id") WHERE "auth_user... 

我想在其他表用户外键是基于类名来形成的......我该如何解决这个问题?我尝试使用模型元类中的default_related_name字段,但这没有任何正面影响。

在此先感谢您的帮助!

亲切的问候, K.

回答

0

好了,我发现我的问题的解决方案:确保自定义用户模型类被命名为“用户”而不是“ExtUser”,一切都将继续工作。

简单! :-)

+0

它不需要命名为“用户”。只要您指定设置内部,它仍然可以是“ExtUser”。在您的设置中将AUTH_USER_MODEL设置为your_app.ExtUser。例如:AUTH_USER_MODEL ='my_app.ExtUser' – 2014-11-05 00:49:08