Django: импортировать пользователя auth в модель

83

У меня одна проблема. В 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

Как это исправить?

Итак, я хочу создать новую OneToOneтаблицу «worker» в db, которая связана с таблицей «auth_user». Благодарю.

Лев
источник

Ответы:

194
from django.contrib.auth.models import User

Вы пропустили модели - а пользователь написан с большой буквы.

Если вы используете настраиваемую модель пользователя, вы должны использовать:

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

Более подробную информацию можно найти в документации .

Изменено в Django 1.11:

Добавлена ​​возможность вызова get_user_model () во время импорта.

Томас Шварцль
источник
Большое спасибо, но в документе django сказано, что нет, где модели docs.djangoproject.com/en/dev/ref/contrib/auth Кстати, еще раз спасибо.
BlaShadow
74

Если вы используете пользовательскую модель 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)

документы

Цианан Симс
источник
6
Это более правильный ответ, чем принятый ответ, поскольку он более переносимый.
Will
3

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
Simplans
источник
1

Чтобы ваш код оставался универсальным, используйте get_user_model()метод для получения модели пользователя и AUTH_USER_MODELнастройку для ссылки на нее при определении отношений модели к модели пользователя вместо непосредственной ссылки на модель пользователя auth.

ссылка: Django By Example Book

Harishkb
источник