Django: Authentifizierungsbenutzer in das Modell importieren

81

Ich habe ein Problem. In Django habe ich ein neues Modell erstellt:

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

Aber es funktioniert nicht: ImportError: cannot import name user

Wie man es repariert?

Daher möchte ich in db eine neue Tabelle "Arbeiter" erstellen, die eine OneToOneBeziehung zur Tabelle "auth_user" hat. Vielen Dank.

Lev
quelle

Antworten:

190
from django.contrib.auth.models import User

Sie haben die Modelle verpasst - und der Benutzer wird groß geschrieben.

Wenn Sie ein benutzerdefiniertes Benutzermodell verwenden, sollten Sie Folgendes verwenden:

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

Weitere Details finden Sie in den Dokumenten .

In Django 1.11 geändert:

Die Möglichkeit, get_user_model () zum Zeitpunkt des Imports aufzurufen, wurde hinzugefügt.

Thomas Schwärzl
quelle
Vielen Dank, aber auf dem Django-Dokument steht nein, wo Modelle docs.djangoproject.com/de/dev/ref/contrib/auth BTW Nochmals vielen Dank.
BlaShadow
70

Wenn Sie ein benutzerdefiniertes Benutzermodell verwenden, gehen Sie wie folgt vor, um darauf zu verweisen:

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

Oder wenn Sie es in Fremdschlüsseln oder in vielen-zu-vielen-Beziehungen verwenden:

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

docs

Cianan Sims
quelle
6
Dies ist korrekter als die akzeptierte Antwort, da es portabler ist.
Will
3

AUTH_USER_MODEList eine gute Lösung. Hier ist die vollständige Lösung gemäß der Frage.

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
quelle
1

Um Ihren Code generisch zu halten, verwenden Sie die get_user_model()Methode zum Abrufen des Benutzermodells und die AUTH_USER_MODELEinstellung, auf die verwiesen wird, wenn Sie die Beziehungen des Modells zum Benutzermodell definieren, anstatt direkt auf das Auth-Benutzermodell zu verweisen.

ref: Django By Example Book

harishkb
quelle