django-registration 1.0 现在支持 Django 1.5 的自定义用户模型。django-registration 文档中仅有以下关于此的常见问题解答:
我正在使用 Django 1.5 和自定义用户模型;如何让它工作?
虽然 django-registration 提供的两个内置后端都假定了 Django 的默认 User 模型,但其基础视图类是故意不依赖于用户模型的。只需对其进行子类化,并为您的自定义用户模型实现逻辑即可。
我不确定需要对哪些视图进行子类化,以及应该在其中添加些什么内容。我还注意到 django-registration 中的 ProfileManager
仍然假定有单独的用户名字段。
在我的具体情况中,我已经删除了“用户名”字段,添加了“显示名称”,并将“电子邮件”字段用作标识字段:
class MyUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
verbose_name="Email Address",
max_length=384,
unique=True,
db_index=True,)
display_name = models.CharField(max_length=128, blank=True)
date_joined = models.DateTimeField(default=timezone.now)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
def get_full_name(self):
return self.email
def get_short_name(self):
return self.email
def __unicode__(self):
return self.email
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return True
@property
def is_staff(self):
return self.is_admin
在不使用任何django-registration类的情况下,注册表单的默认呈现会从User
中提取字段,而不是MyUser
。
我看过了以下SO主题django-registration app and Django 1.5 custom user model,但没有帮助。
更新
我注意到RegistrationForm硬编码了一个'username'字段。 FAQ仅提到了子类化后端,所以我不确定这里的意图是什么。 我应该也子类化表单吗?
DefaultBackend
,RegistrationFormFromUserModel
以及RegistrationManager
。 - pankaj28843