Django:将身份验证用户导入模型


83

我有一个问题。在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”,该OneToOne表与表“ auth_user”有关系。谢谢。

Answers:


193
from django.contrib.auth.models import User

您错过了模型-用户大写。

如果使用自定义用户模型,则应使用:

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

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

在Django 1.11中进行了更改:

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


非常感谢,但在django的文档上却说没有模型docs.djangoproject.com/en/dev/ref/contrib/auth顺便说一句。
BlaShadow13年

73

如果您使用的是自定义用户模型,请执行以下操作以引用它:

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

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

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

docs


6
这比公认的答案更正确,因为它更便于携带。
2015年

3

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

1

为了使您的代码通用,请使用get_user_model()方法检索用户模型和AUTH_USER_MODEL请在定义模型与用户模型的关系时设置以引用该模型,而不是直接引用auth用户模型。

参考:通过示例书的Django

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.