0
我很確定這兩個查詢是等價的,但我可能是錯的。這些查詢是否有區別
class Sample(models.Model):
file = models.FileField(blank=True, null=True)
OK是這些查詢相同
Sample.objects.exclude(~Q(file=''))
Sample.objects.exclude(file__isnull=False)
我很確定這兩個查詢是等價的,但我可能是錯的。這些查詢是否有區別
class Sample(models.Model):
file = models.FileField(blank=True, null=True)
OK是這些查詢相同
Sample.objects.exclude(~Q(file=''))
Sample.objects.exclude(file__isnull=False)
這將q對象的完全沒有必要使用。這實際上只適用於你想添加多個條件的人,特別是如果你使用OR加入他們。而且我看不出在相同條件下使用exclude
和~
的任何理由。
但是,查詢並不相同:第一個排除file
屬性不是空字符串的對象,而第二個排除file
爲空的對象;這些不一定相同。
注意,第二個查詢可以更簡潔地表示:
Sample.objects.exclude(file=None)
所以,如果我正在尋找的是確實有一些對文件設置的所有樣品,我應該.exclude(文件=無)? – user2734679