Django: importuj użytkownika uwierzytelniającego do modelu

83

Mam jeden problem. W Django stworzyłem nowy model:

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

Ale to nie działa: ImportError: cannot import name user

Jak to naprawić?

Dlatego chcę utworzyć nową tabelę „workers” w bazie danych, która ma OneToOnerelację z tabelą „auth_user”. Dzięki.

Lew
źródło

Odpowiedzi:

194
from django.contrib.auth.models import User

Brakowało Ci modeli - a użytkownik jest kapitalizowany.

Jeśli używasz niestandardowego modelu użytkownika, powinieneś użyć:

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

Więcej szczegółów można znaleźć w dokumentacji .

Zmienione w Django 1.11:

Dodano możliwość wywołania get_user_model () w czasie importu.

Thomas Schwärzl
źródło
wielkie dzięki, ale w dokumencie django jest napisane nie, gdzie models docs.djangoproject.com/en/dev/ref/contrib/auth Przy okazji jeszcze raz dziękuję.
BlaShadow
74

Jeśli używasz niestandardowego modelu użytkownika, wykonaj następujące czynności, aby się do niego odwołać:

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

Lub jeśli używasz go w kluczu obcym lub relacjach wiele do wielu:

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

dokumenty

Cianan Sims
źródło
6
Jest to bardziej poprawne niż zaakceptowana odpowiedź, ponieważ jest bardziej przenośne.
Będzie
3

AUTH_USER_MODELto dobre rozwiązanie. tutaj jest kompletne rozwiązanie zgodnie z pytaniem.

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
Simplans
źródło
1

Aby zachować ogólny kod, użyj get_user_model()metody, aby pobrać model użytkownika iAUTH_USER_MODEL ustawienia, aby odwoływać się do niego podczas definiowania relacji modelu do modelu użytkownika, zamiast odwoływać się bezpośrednio do modelu użytkownika uwierzytelniania.

ref: Django By Example Book

harishkb
źródło