Lecture de la documentation Django:
get_user_model ()
Au lieu de faire référence directement à User, vous devez référencer le modèle utilisateur en utilisant django.contrib.auth.get_user_model (). Cette méthode renverra le modèle User actuellement actif - le modèle User personnalisé si celui-ci est spécifié, ou User sinon.
Lorsque vous définissez une clé étrangère ou des relations plusieurs-à-plusieurs avec le modèle User, vous devez spécifier le modèle personnalisé à l'aide du paramètre AUTH_USER_MODEL.
Je suis confus avec le texte ci-dessus. Dois-je faire ceci:
author = models.ForeignKey(settings.AUTH_USER_MODEL)
ou ca...
author = models.ForeignKey(get_user_model())
Les deux semblent fonctionner.
AUTH_USER_MODEL
paramètre dans le code qui est exécuté au moment de l'importation. Fonctionneget_user_model()
uniquement une fois que Django a importé tous les modèles."get_user_model()
, pour l'utilisation des attributs de classeAUTH_USER_MODEL
?Nouveau depuis Django 1.11.
Depuis Django 1.11, vous pouvez utiliser
get_user_model()
dans les deux cas! Donc, si vous ne voulez pas vous en préoccuper davantage, allez-y."dans les deux cas" signifie: si vous avez besoin du modèle utilisateur pour accéder à ses attributs, ainsi que si vous voulez définir une relation ForeignKey / ManyToMany.
Depuis le journal des modifications :
alors ... y a-t-il encore une raison d'utiliser
settings.AUTH_USER_MODEL
? Eh bien, la documentation recommande toujours lesettings.AUTH_USER_MODEL
(qui est une chaîne) pour définir les relations, mais sans donner de raison explicite. Cela peut être bénéfique pour les performances, mais ne semble pas avoir beaucoup d'importance.Exemple de code:
la source
get_user_model()
peut être appelé au moment de l'importation; cependant, Django conseille toujours aux utilisateurs de définir les relations de clé étrangère et plusieurs-à-plusieurs en utilisant AUTH_USER_MODELget_user_model
, en particulier pour les lecteurs qui sont confus au sujet de la distinction)Depuis Django 1.11,
get_user_model()
utilise en faitsettings.AUTH_USER_MODEL
:la source
Un moyen de revenir au modèle utilisateur par défaut si AUTH_USER_MODEL n'est pas défini:
la source
AUTH_USER_MODEL
a déjà une valeur par défaut, elle sera donc toujours définie.User
est un modèle