我有一个模型,我正在做一个查询:
my_objects = Model.objects.filter(user = request.user)
现在我正在做的 my_objects :
obj = my_objects.get(user = x )
我试图了解我的.get over my_objects 是否不会对数据库生成另一个查询,并且只会对过滤器输出起作用?否则它将生成另一个查询。
我有一个模型,我正在做一个查询:
my_objects = Model.objects.filter(user = request.user)
现在我正在做的 my_objects :
obj = my_objects.get(user = x )
我试图了解我的.get over my_objects 是否不会对数据库生成另一个查询,并且只会对过滤器输出起作用?否则它将生成另一个查询。
如果Model
不是 User 实例,它将再次命中数据库,因为在这种情况下 User 是一个相关对象,如果您不想再次命中数据库,请使用 select_related() 并自行过滤obj
:
“将自动“遵循”外键关系,在执行查询时选择附加的相关对象数据”
my_objects = Model.objects.select_related().filter(user = request.user)
在此处查看更多信息: https ://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related
编辑: 我忘了提到 Django 中的 QuerySet 是懒惰的,实际上在评估查询集之前不要点击数据库,这些是强制评估查询集的方法: 方法