Django: 将认证用户导入模型

94

在Django中,我创建了一个新模型:

from django.db import models
from django.contrib.auth import user

class Workers(models.Model):
    user = models.OneToOneField(User, primary_key=True)
        work_group = models.CharField(max_length=20)
        card_num = models.IntegerField()
    def __unicode__(self):
            return self.user

但是它不起作用:ImportError: cannot import name user

如何修复?

我想在数据库中创建一个名为“workers”的新表,它与“auth_user”表具有OneToOne关系。

4个回答

224
from django.contrib.auth.models import User

你错过了models - user应该大写。

如果你使用自定义的用户模型,应该使用:

from django.contrib.auth import get_user_model
User = get_user_model()

更多细节可以在文档中找到。

Django 1.11中的更改:

添加了在导入时调用get_user_model()的能力。


非常感谢,但在Django的文档中没有提到models https://docs.djangoproject.com/en/dev/ref/contrib/auth/ 顺便说一下,再次感谢。 - BlaShadow

82

如果您正在使用自定义用户模型,请按照以下步骤引用它:

from django.contrib.auth import get_user_model
User = get_user_model()

如果在外键或多对多关系中使用它:

from django.conf import settings
....
user = models.ForeignKey(settings.AUTH_USER_MODEL)

文档


8
这个回答比被采纳的答案更正确,因为它更具可移植性。 - Will

5

AUTH_USER_MODEL 是一个好的解决方案,以下是完整的解决方案。

from django.db import models
from django.conf import settings

class Workers(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    work_group = models.CharField(max_length=20)
    card_num = models.IntegerField()

    def __unicode__(self):
        return self.user.id

3
为了保持代码的通用性,在定义模型与用户模型的关联时,请使用get_user_model()方法来检索用户模型,而不是直接引用auth用户模型,并使用AUTH_USER_MODEL设置引用它。请参考Django By Example书籍。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接