Django: імпортувати користувача до моделі


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

Як це виправити?

Отже, я хочу створити нову таблицю "worker" у db, яка має OneToOneзв'язок із таблицею "auth_user". Дякую.

Відповіді:


193
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

73

Якщо ви використовуєте власну модель користувача, зробіть наступне, щоб вказати на неї посилання:

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
Це правильніше прийнятої відповіді, оскільки є більш портативним.
Буде

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

1

Для того, щоб зберегти ваш код загальним, використовуйте get_user_model()метод для отримання користувальницької моделі та AUTH_USER_MODELналаштування для посилання на неї при визначенні відносин моделі до моделі користувача, замість того, щоб посилатися безпосередньо на модель користувача auth.

ref: Django За прикладом книги

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.