何时在 Django 1.5 中使用自定义用户模型

Posted

技术标签:

【中文标题】何时在 Django 1.5 中使用自定义用户模型【英文标题】:When to use the Custom User Model in Django 1.5 【发布时间】:2013-02-13 22:32:27 【问题描述】:

我对 Django 1.5 中的自定义用户模型有疑问

所以现在默认用户模型在我看来还不错,我只需要添加一些其他变量,例如性别、位置和生日,以便用户在成功注册并激活帐户后填写这些变量。

那么,实现这个场景的最佳方式是什么?

我是否必须创建一个名为 Profile 的新应用并继承 AbstractBaseUser?并将我的自定义变量添加到models.py?有什么好榜样可以效仿吗?

提前谢谢你

【问题讨论】:

如果您不担心数据库优化,您可以创建额外的配置文件模型并与 django.contrib.auth.models 中的用户模型建立一对一的关系。 Django 1.5 中的更改允许您创建自定义用户模型,在这种情况下,模型对应于 1 个数据库表。不需要创建专门的分离应用程序,可以将模型添加到一些常用的models.py中。但如果你愿意,你可以。 【参考方案1】:

您希望将用户模型扩展到 AbstractUser 并添加其他字段。 AbstractUser 继承了所有标准用户配置文件字段,而 AbstractBaseUser 从头开始​​,没有任何这些字段。

很难在接近发布的时候定义最佳实践,但似乎除非您需要彻底重新定义用户模型,否则您应该尽可能使用AbstractUser

Here are the docs for extending the User model using AbstractUser

您的models.py 将如下所示:

class MyUser(AbstractUser):
    gender = models.DateField()
    location = models.CharField()
    birthday = models.CharField()

MyUser 将拥有 User 模型附带的标准电子邮件、密码、用户名等字段,以及上面的三个附加字段。

然后您需要将AUTH_USER_MODEL 添加到您的settings.py

AUTH_USER_MODEL = 'myapp.MyUser'

【讨论】:

不错的答案,还没有解决新方法 - 插板。 :-) 创建用户时出现此错误:Manager isn't available; User has been swapped for 'myapp.MyUser' #suhail。您需要为您的自定义用户模型提供自定义管理器。 如果像这样扩展怎么办class MyUser(AbstractBaseUser, PermissionsMixin):

以上是关于何时在 Django 1.5 中使用自定义用户模型的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 1.5 自定义用户模型中使用电子邮件作为用户名字段导致 FieldError

如何在 django 1.5 中自定义用户模型

Django 1.5:UserCreationForm 和自定义身份验证模型

为 django 1.5 自定义用户模型子类化 django-registration 1.0 表单

将现有 auth.User 数据迁移到新的 Django 1.5 自定义用户模型?

我可以在不创建自定义用户的情况下更改 Django 1.5 中的 USERNAME_FIELD 吗?