我正在尝试通过合并两个查询集来获取一个查询集。条件如下:
让我们说我有一个名为MyModel的模型,其中有一个名为value的字段,用于存储整数,但是该值可以为null。
我知道Django中的查询集是惰性的,但是我不确定在下面的代码行中是否满足条件。
qs = MyModel.objects.exclude(value__isnull=True).filter(value__gte=250).order_by('-value') | MyModel.objects.exclude(value__isnull=False)
objects = qs[:20]
基本上,我首先过滤出值不为null的地方,然后根据值对它们进行排序,然后最后添加被排除的值。这符合我的条件吗?也就是说,数据库是否被命中一次?此外,如果没有|
运算符,还有更好的方法吗?
注意:我知道无需合并查询集就可以完成此操作,但是出于这个问题的考虑,让我们假设拥有2个这样的查询集是绝对必要的。
编辑:添加了第三个条件,我认为这是隐含的。我不好。
答案 0 :(得分:1)
是的,正如您所说的那样。 This是查询集联合的未记录实现。它只会打一次数据库。
您可以通过print(qs.query)
我还建议检查FAQ: How can I see the raw SQL queries Django is running?
from django.db import connection
connection.queries
它将允许您检查命中数据库的查询