这些查询之间是否存在差异?

时间:2015-09-16 19:37:54

标签: django django-models

我很确定这两个查询是等价的,但我可能错了。

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

确定这些查询相同

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

1 个答案:

答案 0 :(得分:2)

这完全不必要地使用Q对象。这实际上只适用于您想要添加多个条件的人,特别是如果您使用OR加入它们。我无法在相同条件下使用exclude~

但是,查询不一样:第一个排除file属性不是空字符串的对象,而第二个排除file为空的对象;这些不一定相同。

请注意,第二个查询可以更简洁地表达:

Sample.objects.exclude(file=None)