Подтвердить что ты не робот

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

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

Итак, я хочу создать новую таблицу "employees" в db, которая имеет отношение OneToOne к таблице "auth_user". Спасибо.

4b9b3361

Ответ 1

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() во время импорта.

Ответ 2

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

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

Или, если вы используете его во внешнем ключе или во многих отношениях:

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

docs

Ответ 3

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

ref: Django By Example Book

Ответ 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