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". Спасибо.

532   4  

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)

docs

чтобы сохранить общий код, используйте 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

    Ничего не найдено.