Django:将auth用户导入到模型中

我有一个问题。 在Django中,我创build了一个新模型:

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中创build一个新的“workers”表,它与表“auth_user”具有OneToOne关系。 谢谢。

 from django.contrib.auth.models import User 

你错过了模型 – 用户是大写的。

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

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

更多细节可以在文档中find。

在Django 1.11中更改:

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

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

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

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

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

文档

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

参考: Django的示例书

AUTH_USER_MODEL是一个很好的解决scheme。 这里是根据问题的完整解决scheme。

 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