Lesen der Django-Dokumentation:
get_user_model ()
Anstatt direkt auf Benutzer zu verweisen, sollten Sie das Benutzermodell mit django.contrib.auth.get_user_model () referenzieren. Diese Methode gibt das aktuell aktive Benutzermodell zurück - das benutzerdefinierte Benutzermodell, falls eines angegeben ist, oder den Benutzer anderweitig.
Wenn Sie einen Fremdschlüssel oder viele-zu-viele-Beziehungen zum Benutzermodell definieren, sollten Sie das benutzerdefinierte Modell mit der Einstellung AUTH_USER_MODEL angeben.
Ich bin mit dem obigen Text verwechselt. Soll ich das machen:
author = models.ForeignKey(settings.AUTH_USER_MODEL)
oder dieses...
author = models.ForeignKey(get_user_model())
Beide scheinen zu funktionieren.
AUTH_USER_MODEL
Einstellung im Code referenzieren, die beim Import ausgeführt wird. Funktioniertget_user_model()
nur, wenn Django alle Modelle importiert hat."get_user_model()
für Klassenattribute verwendenAUTH_USER_MODEL
?Neu seit Django 1.11.
Seit Django 1.11 können Sie
get_user_model()
in beiden Fällen verwenden! Wenn Sie sich also nicht weiter darum kümmern möchten, nehmen Sie es einfach."in beiden Fällen" bedeutet: wenn Sie das Benutzermodell für den Zugriff auf seine Attribute benötigen sowie eine ForeignKey / ManyToMany-Beziehung definieren möchten.
Aus dem Changelog :
Also ... gibt es noch einen Grund zu verwenden
settings.AUTH_USER_MODEL
? Nun, die Dokumente empfehlen immer noch diesettings.AUTH_USER_MODEL
(was eine Zeichenfolge ist) zum Definieren von Beziehungen, ohne jedoch einen expliziten Grund anzugeben. Könnte für die Leistung von Vorteil sein, scheint aber nicht viel zu bedeuten.Codebeispiel:
quelle
get_user_model()
dies beim Import aufgerufen werden kann. Django rät jedoch weiterhin, dass Benutzer Fremdschlüssel- und Viele-zu-Viele-Beziehungen mit AUTH_USER_MODEL definierenget_user_model
, besonders für Leser, die über die Unterscheidung verwirrt sind)Seit Django 1.11
get_user_model()
verwendet tatsächlichsettings.AUTH_USER_MODEL
:quelle
Eine Möglichkeit, auf das Standardbenutzermodell zurückzugreifen, wenn AUTH_USER_MODEL nicht festgelegt ist:
quelle
AUTH_USER_MODEL
hat bereits eine Standardeinstellung, daher wird diese immer festgelegt.User
ist ein Modell