Lendo a documentação do Django:
get_user_model ()
Em vez de se referir ao usuário diretamente, você deve referenciar o modelo do usuário usando django.contrib.auth.get_user_model (). Este método retornará o modelo de usuário ativo no momento - o modelo de usuário personalizado, se houver um especificado, ou usuário, caso contrário.
Ao definir uma chave estrangeira ou relações muitos para muitos para o modelo de Usuário, você deve especificar o modelo personalizado usando a configuração AUTH_USER_MODEL.
Estou confuso com o texto acima. Devo estar fazendo isso:
author = models.ForeignKey(settings.AUTH_USER_MODEL)
ou isto...
author = models.ForeignKey(get_user_model())
Ambos parecem funcionar.
AUTH_USER_MODEL
configuração no código que é executado no momento da importação.get_user_model()
Só funciona depois que o Django importou todos os modelos."get_user_model()
, para uso de atributos de classeAUTH_USER_MODEL
?Novo desde Django 1.11.
Desde Django 1.11 você pode usar
get_user_model()
em ambos os casos! Portanto, se você não quiser se preocupar mais com isso, basta levá-lo."em ambos os casos" significa: se você precisa do modelo de usuário para acessar seus atributos, bem como se deseja definir uma relação ForeignKey / ManyToMany.
Do changelog :
então ... ainda há um motivo para usar
settings.AUTH_USER_MODEL
? Bem, os documentos ainda recomendam osettings.AUTH_USER_MODEL
(que é uma string) para definir relações, mas sem dar uma razão explícita. Pode ser benéfico para o desempenho, mas não parece importar muito.Exemplo de código:
fonte
get_user_model()
pode ser chamado no momento da importação; no entanto, Django ainda avisa que os usuários definem relações de chave estrangeira e muitos para muitos usando AUTH_USER_MODELget_user_model
, especialmente para os leitores que estão confusos sobre a distinção)Desde Django 1.11,
get_user_model()
na verdade usasettings.AUTH_USER_MODEL
:fonte
Uma maneira de voltar ao modelo de usuário padrão se AUTH_USER_MODEL não estiver definido:
fonte
AUTH_USER_MODEL
já tem um padrão, então ele sempre será definido.User
é um modelo