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

Rat*_*tan 1 python django django-models

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

小智 5

他们有不同的用例。

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

如果您正在编写一个简单的应用程序,它不会被重用,如果您愿意,您可以使用User模型,如果您自定义它,您可以从您的模型或从 django 本身导入该模型。例如from myapp.models import MyUserModel

特别是,您必须使用:

  • get_user_model()当您需要导入 User 模型进行查询时。例如
User = get_user_model()
User.objects.filter(...)
Run Code Online (Sandbox Code Playgroud)
  • settings.AUTH_USER_MODEL当您需要在ForeignKey,ManyToManyField或 中引用 User 模型时OneToOneField。例如
class MyModel(models.Model):
 user = models.ForeignKey(settings.AUTH_USER_MODEL)
Run Code Online (Sandbox Code Playgroud)

如果您get_user_model()在创建 ForeignKey ,ManyToManyField orOneToOneField`时尝试使用用户,您可能会遇到循环导入问题。

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