Django:将auth用户导入模型

时间:2012-10-16 19:08:47

标签: django django-models

我有一个问题。在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

如何解决?

所以,我想在db中创建一个新的表“workers”,它与表“auth_user”有OneToOne的关系。感谢。

4 个答案:

答案 0 :(得分:169)

from django.contrib.auth.models import User

您错过了模型 - 用户资本化。

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

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

更多详细信息,请参阅docs

  

在Django 1.11中更改:

     

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

答案 1 :(得分:64)

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

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

答案 2 :(得分:1)

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

参考:Django By Example预订

答案 3 :(得分:1)

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