86

在 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”有关系。

4

4 回答 4

209
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() 的功能。

于 2012-10-16T19:09:57.830 回答
76

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

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

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

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

文档

于 2013-10-26T03:05:07.363 回答
4

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
于 2017-06-10T04:51:51.203 回答
2

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

参考:Django 示例

于 2016-02-06T20:44:53.167 回答