我很确定这两个查询是等价的,但我可能错了。
class Sample(models.Model):
file = models.FileField(blank=True, null=True)
确定这些查询相同
Sample.objects.exclude(~Q(file=''))
Sample.objects.exclude(file__isnull=False)
答案 0 :(得分:2)
这完全不必要地使用Q对象。这实际上只适用于您想要添加多个条件的人,特别是如果您使用OR加入它们。我无法在相同条件下使用exclude
和~
。
但是,查询不一样:第一个排除file
属性不是空字符串的对象,而第二个排除file
为空的对象;这些不一定相同。
请注意,第二个查询可以更简洁地表达:
Sample.objects.exclude(file=None)