Django是否检查QuerySet是否已被评估过?

时间:2016-12-12 19:09:53

标签: python django django-queryset

当Django实际从QuerySet方法中访问数据库时,我找不到打印出来的方法,但是根据文档,我的下面的示例应该不必要地执行两个查询,或者是这样做?

queryset = MyModel.objects.all()
#Slicing evaluates a query
queryset = queryset[5:10]
#Serializing should also evaluate a query
data = serializers.serialize('json', queryset, fields=('pk', 'name'))

1 个答案:

答案 0 :(得分:1)

此代码执行多个查询的唯一方法是,如果序列化程序包含有关相关字段的数据,则可以执行进一步查询以检索相关模型的结果。

正如评论中knbk所述,

  

切片未评估的QuerySet通常会返回另一个未评估的QuerySet,但如果使用切片语法的“step”参数,Django将执行数据库查询,并返回一个列表。切片已经评估的QuerySet也会返回一个列表。

由于您没有使用某个步骤,因此切片不是评估查询的操作