2012-10-16 16 views
53

Mam jeden problem. W Django I stworzył nowy model:Django: importuj auth użytkownika do modelu

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ć?

Tak więc chcę utworzyć nową tabelę "pracownicy" w db, który ma relację OneToOne z tabelą "auth_user". Dzięki.

Odpowiedz

131
from django.contrib.auth.models import User 

przegapiłeś modele - i użytkownik zostanie aktywowane.

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

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

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

Zmiana w Django 1.11:

możliwość połączenia get_user_model() w czasie importu dodano.

+0

dzięki dużo, ale na doc Django za to powiedzieć, nie ma gdzie modele https://docs.djangoproject.com/en/dev/ref/contrib/auth/ BTW Dzięki jeszcze raz. – BlaShadow

61

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

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

Albo jeśli używasz go w kluczu obcym lub wiele-do-wielu Relacje:

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

docs

+6

Jest to poprawniejsza odpowiedź niż zaakceptowana, ponieważ jest bardziej przenośna. – Groady

1

aby zachować swój kod rodzajowy, użyj metody get_user_model() odzyskać modelu obsługi i AUTH_USER_MODEL ustawienie, aby odnieść się do niego podczas definiowania relacji modelu do modelu użytkownika, zamiast bezpośredniego odwoływania się do modelu użytkownika auth.

ref: Django By Example Book

0

AUTH_USER_MODEL jest dobrym rozwiązaniem. tutaj jest kompletne rozwiązanie, jak na pytanie.

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 
Powiązane problemy