2013-11-27 65 views
0

Django >= 1.5,给定一个CustomUser模型emailUSERNAME_FIELD并没有其他REQUIRED_FIELDS使用Django注册自定义用户没有明确的用户名字段

# customapp.models.py 
class CustomUser(AbstractBaseUser): 
    email = models.EmailField(verbose_name='email address', 
     max_length=255, unique=True, db_index=True, 
    ) 
    USERNAME_FIELD = 'email' 
    ... 

什么是使用django-registration最简单的方法,号称是兼容与Custom User Models,而不必实际上重写所有内容?

据我已经得到作为创造我自己的后端,包括:

  • 自定义登记表(SANS username
  • 更新网址,通过新的自定义登记表
  • 继承的基本视(删除引用username

现在,django-registration AP的核心models.py内p,我发现RegistrationProfilehardcoded参考方法create_inactive_usercreate_profile中的username

有没有办法使用django-registration这个Custom User Model而不必修改核心registration应用程序中的任何东西?

回答

1

由于Django的注册需要访问user.username,你可以把它添加到您的用户:

class CustomUser(AbstractBaseUser): 
    email = models.EmailField(verbose_name='email address', 
     max_length=255, unique=True, db_index=True, 
    ) 
    USERNAME_FIELD = 'email' 
    ... 
    @property 
    def username(self): 
     return getattr(self, self.USERNAME_FIELD) 

    @username.setter 
    def set_username(self, value): 
     self.email = value 
+0

这看起来很有希望。考虑到'RegistrationProfile',你将如何处理我的'CustomManager'的'create_user(self,email,password = None)'方法[想通过'username'](https://bitbucket.org/ubernostrum/django-登记/ SRC/8f242e35ef7c004e035e54b4bb093c32bf77c29f /登记在默认=#CL-84/models.py?)?谢谢。 – bnjmn

+0

定义你的create_user接受参数,如'create_user(self,username,email,password)'? – iMom0

+0

我尝试过,但它似乎导致其他地方的问题,如创建'django-admin.py createsuperuser'或任何其他地方的用户创建'登记'之外。 – bnjmn

相关问题