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
как это исправить?
Итак, я хочу создать новую таблицу "сотрудники" в БД, которая имеет OneToOne связь с таблицей "auth_user". Спасибо.
4 ответов:
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() во время импорта.
Если вы используете пользовательскую модель пользователя, выполните следующие действия, чтобы ссылаться на нее:
from django.contrib.auth import get_user_model User = get_user_model()или при использовании его во внешнем ключе или многие-ко-многим отношения:
from django.conf import settings .... user = models.ForeignKey(settings.AUTH_USER_MODEL)
чтобы сохранить общий код, используйте
get_user_model()метод для получения модели пользователя иAUTH_USER_MODELустановка для ссылки на него при определении отношений модели к пользовательской модели, вместо того, чтобы напрямую ссылаться на пользовательскую модель auth.ref:Джанго На Примере книги
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
Comments