Django:将auth用户导入模型

tim*_*tim 78 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
Run Code Online (Sandbox Code Playgroud)

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

怎么解决?

所以,我想在db中创建一个新表"workers",它OneToOne与表"auth_user" 有关系.谢谢.

Tho*_*rzl 182

from django.contrib.auth.models import User
Run Code Online (Sandbox Code Playgroud)

你错过了模型 - 用户资本化.

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

from django.contrib.auth import get_user_model
User = get_user_model()
Run Code Online (Sandbox Code Playgroud)

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

在Django 1.11中更改:

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


Cia*_*ims 64

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

from django.contrib.auth import get_user_model
User = get_user_model()
Run Code Online (Sandbox Code Playgroud)

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

from django.conf import settings
....
user = models.ForeignKey(settings.AUTH_USER_MODEL)
Run Code Online (Sandbox Code Playgroud)

文档

  • 这比接受的答案更正确,因为它更便携. (6认同)

Sim*_*ans 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
Run Code Online (Sandbox Code Playgroud)