gpt4 book ai didi

Django 查询集 EXCLUDE : are these equivalent?

转载 作者:行者123 更新时间:2023-12-01 15:48:24 25 4
gpt4 key购买 nike

在 Django 中,这两个是等价的吗?

Cars.objects.exclude(brand='mercedes').exclude(year__lte=2000)

Cars.objects.exclude(brand='mercedes', year__lte=2000)

?

我知道第一个说:排除任何梅赛德斯并排除任何超过 2000 年的汽车。第二个呢?说的一样吗?还是只排除 2000 年以上的 mercedes 组合?

谢谢!

最佳答案

两者等价。

正如 documentation on exclude(..) 中指定的那样:

The lookup parameters (**kwargs) should be in the format described in Field lookups below. Multiple parameters are joined via AND in the underlying SQL statement, and the whole thing is enclosed in a NOT().

所以第一个查询可以读作:

-- first query
SELECT car.*
FROM car
WHERE NOT (brand = 'mercedes') AND NOT (YEAR <= 2000)

而后者等价于:

-- second query
SELECT car.*
FROM car
WHERE NOT (brand = 'mercedes' AND YEAR <= 2000)

第一个查询在语义上与“所有不是梅赛德斯的汽车;并且不是在 2000 年之前或 2000 年制造的汽车”的语义相同。而第二个查询是“2000 年前或 2000 年制造的除梅赛德斯之外的所有汽车。”。

因此,如果表包含 1993 年制造的福特,那么第一个查询将包含它,而第二个查询将包含它,因为 brand 是 < em>not Mercedes,not 被排除在外(因此它将成为查询集的一部分)。

关于Django 查询集 EXCLUDE : are these equivalent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52221778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com