django中的過濾器和排除之間有區別嗎?如果我有Django過濾器vs排除
self.get_query_set().filter(modelField=x)
我想添加另一個標準,在跟隨兩行代碼之間是否有意義的區別?
self.get_query_set().filter(user__isnull=False, modelField=x)
self.get_query_set().filter(modelField=x).exclude(user__isnull=True)
是一種被認爲是更好的做法還是它們在功能和性能上都一樣?
謝謝。所以這只是個人喜好的問題?我只是想確保我不會做一些莫名其妙的愚蠢行爲。 – Enrico 2010-03-11 17:11:22
@Enrico:不是,它取決於你想要的。看到我的答案。在這種情況下,性能並不重要,它們是兩種用於不同目的的方法。對於SQL生成,文檔中提到'.exclude()':*在底層SQL語句中通過AND連接了多個參數,並且整個事件都包含在NOT()。* – 2010-03-11 17:26:04
@Felix中。謝謝。我想我的主要問題 - 我可以更清楚地傳達的是關於django和SQL最終的表現。從您的後續評論中,聽起來好像其中一個可能比另一個更好,但主要基於生成的SQL。但是,將第二個語句更改爲'.exclude(user__isnull = True).filter(modelField = x)'會使兩個語句再次相同。 – Enrico 2010-03-13 18:13:14