关注this question,我想知道写作是否有任何区别
.filter(league_pk__in=[1,2,3])
和
.filter(league=[1,2,3])
我已经尝试了两种方法,它们似乎在我的代码中返回了相同的结果,但在文档中没有任何地方说它们是相同的(as with __exact
)。
我可以安全地假设这两种形式是平等的吗?它在哪里记录?
答案 0 :(得分:5)
在不知道模型上定义的关系的情况下,我们无法肯定地说出来。我可以给你的是一种检查查询的方法,它会告诉你它们是否相同:
print your_qs.filter(league_pk__in=[1,2,3]).query
print your_qs.filter(league=[1,2,3]).query
然后查看生成的sql,了解db级别的实际情况。
答案 1 :(得分:0)
我认为大致是第一次查询,它正在做:
SELECT * FROM model WHERE model.league_id IN (SELECT id FROM league WHERE id IN(1, 2, 3))
对于第二个查询,它正在执行:
SELECT * FROM model WHERE model.league_id IN (1, 2, 3)