Django: 将 auth 用户导入模型

在 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 中创建一个新的表“ worker”,它与表“ auth _ user”具有 OneToOne关系。

97753 次浏览
from django.contrib.auth.models import User

You missed the models - and user is capitalized.

If you use a custom user model you should use:

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

More details can be found in the docs.

Changed in Django 1.11:

The ability to call get_user_model() at import time was added.

If you're using a custom User model, do the following to reference it:

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

Or if using it in foreign key or many-to-many relations:

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

docs

In order to keep your code generic, use the get_user_model() method to retrieve the user model and the AUTH_USER_MODEL setting to refer to it when defining model's relations to the user model, instead of referring to the auth user model directly.

ref: Django By Example Book

AUTH_USER_MODEL is a good solution. here is the complete solution as per the question.

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