2015-09-16 87 views
0

我很確定這兩個查詢是等價的,但我可能是錯的。這些查詢是否有區別

class Sample(models.Model): 
    file = models.FileField(blank=True, null=True) 

OK是這些查詢相同

Sample.objects.exclude(~Q(file='')) 
Sample.objects.exclude(file__isnull=False) 

回答

2

這將q對象的完全沒有必要使用。這實際上只適用於你想添加多個條件的人,特別是如果你使用OR加入他們。而且我看不出在相同條件下使用exclude~的任何理由。

但是,查詢並不相同:第一個排除file屬性不是空字符串的對象,而第二個排除file爲空的對象;這些不一定相同。

注意,第二個查詢可以更簡潔地表示:

Sample.objects.exclude(file=None) 
+0

所以,如果我正在尋找的是確實有一些對文件設置的所有樣品,我應該.exclude(文件=無)? – user2734679