在 Django 中使用自定义字段扩展用户模型

Posted

技术标签:

【中文标题】在 Django 中使用自定义字段扩展用户模型【英文标题】:Extending the User model with custom fields in Django 【发布时间】:2011-02-22 15:50:06 【问题描述】:

我正在尝试扩展用户模型,以便我可以添加自己的自定义字段,但我不断收到错误说明:

“NoneType”对象没有属性“_default_manager”

每当我尝试使用时

user.get_profile()

向自定义字段添加值,即每当我像这样使用它时:

user = User.objects.create_user(用户名、电子邮件、密码)

user.first_name = fname

user.last_name = lname

user.save()

uinfo = user.get_profile()

uinfo.timezone = "亚洲/浦那"

uinfo.save()

我已经按照在 Extending the User model with custom fields in Django 没有运气。

【问题讨论】:

【参考方案1】:

首先:您确定在 settings.py 文件中输入了正确的 AUTH_PROFILE_MODULE 值吗?因为如果没有此用户的 UserProfile,异常应该看起来不同。 (不存在)

Anyway:当时没有 UserProfile 对象,因为它不是自动生成的。所以 get_profile() 在你的情况下会引发一个异常。

要么这样做:

if not UserProfile.objects.filter(user=user):
    p = UserProfile(user=user)
    p.save()
uinfo = user.get_profile()
...

或按照http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users 中(松散地)描述的那样创建一个信号

【讨论】:

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

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

在 Django 中扩展用户对象:用户模型继承还是使用 UserProfile?

Django 重写用户模型

如何在 DRF + django-rest-auth 中使用自定义用户模型保存注册时的额外字段

Django allauth 自定义登录表单未呈现自定义用户模型中的所有字段

如何在 django 模型表单中添加自定义字段?