django中的get_user_model(),settings.AUTH_USER_MODEL和USER之间有什么区别?

时间:2019-02-16 05:16:42

标签: python django django-models

django中的get_user_model(),settings.AUTH_USER_MODEL和User之间有什么区别?

2 个答案:

答案 0 :(得分:0)

get_user_model()

  

应该直接引用用户,而不是直接引用用户   使用django.contrib.auth.get_user_model()建立模型。此方法将   返回当前活动的用户模型-自定义用户模型(如果有)   指定,否则指定用户。   Read more

设置。AUTH_USER_MODEL

如果创建自定义User模型,则必须将此模型添加到设置中

用户

如果您不使用自定义User模型,则无需将其添加到settings.py文件中。只需在需要时导入模型。

答案 1 :(得分:0)

它们有不同的用例。

在处理“未知”用户模型时,您需要使用get_user_model()settings.AUTH_USER_MODEL来引用用户模型。 例如。您正在编写将在不同的应用程序中使用的模块,该模块可能会使用自定义的用户模型。

如果您正在编写一个简单的应用程序,则不会重复使用它,如果您愿意,可以使用User模型,如果您对其进行了自定义,则可以从模型中导入,也可以从Django本身中导入。例如。 from myapp.models import MyUserModel

特别是,您必须使用:

  • get_user_model(),当您需要导入用户模型以对其进行查询时。例如。
User = get_user_model()
User.objects.filter(...)
  • settings.AUTH_USER_MODEL,当您需要在ForeignKeyManyToManyFieldOneToOneField中引用用户模型时。例如
class MyModel(models.Model):
 user = models.ForeignKey(settings.AUTH_USER_MODEL)

如果创建外键get_user_model() ManyToManyField , OneToOneField时尝试使用or用户,则可能会出现循环导入问题。

如果要为用户模型提供自定义实现,则还必须在settings.AUTH_USER_MODEL中设置settings.py。例如。 AUTH_USER_MODEL='myapp.MyUserModel