0

我有一个模型,我正在做一个查询:

my_objects = Model.objects.filter(user = request.user)

现在我正在做的 my_objects :

obj = my_objects.get(user = x )

我试图了解我的.get over my_objects 是否不会对数据库生成另一个查询,并且只会对过滤器输出起作用?否则它将生成另一个查询。

4

1 回答 1

1

如果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 是懒惰的,实际上在评估查询集之前不要点击数据库,这些是强制评估查询集的方法: 方法

于 2012-07-25T13:43:47.580 回答