我有一个模型,我正在进行查询:
my_objects = Model.objects.filter(user = request.user)
现在我正在做my_objects:
obj = my_objects.get(user = x )
我试图了解my_objects上的 .get 是否会对数据库生成另一个查询,并且仅对过滤器输出有效?或者它将生成另一个查询。
答案 0 :(得分:1)
如果Model
不是用户实例,它将再次命中数据库,因为在这种情况下用户是一个相关对象,如果你不想再次点击数据库,请使用select_related()并自己过滤{{1} }:
“将自动”跟随“外键关系,选择它 执行查询时的其他相关对象数据“
obj
在此处查看更多信息: https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related
修改强> 我忘了提到django中的QuerySet是懒惰的,实际上在评估查询集之前不会命中db,这些是强制评估查询集的方法: methods