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". Спасибо.
Ответы
Ответ 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