何时在 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:UserCreationForm 和自定义身份验证模型
为 django 1.5 自定义用户模型子类化 django-registration 1.0 表单