现在我只使用Q(id=0)
,这取决于数据库。或者Q(pk__isnull=True)
可能更好?对于使用|
运算符的串联Q对象非常有用。
答案 0 :(得分:3)
Q(pk__isnull=True)
更好,因为PRIMARY KEY
不能包含NULL
值。有些实例可能有id=0
。
答案 1 :(得分:1)
查询优化器比Q(pk__in=[])
处理Q(pk__isnull=True)
更好。例如:
Model.objects.filter(Q(pk__in=[]) # doesn't hit the DB
Model.objects.none() # doesn't hit the db
Model.objects.filter(Q(pk__isnull=True)) # hits the DB
如果甚至适用于复杂的查询和波浪号取反:
Model.objects.filter( (Q(pk__in=[]) & Q(foo="bar")) | Q(hello="world") )
# simplifies condition to 'WHERE "hello" = world'
Model.objects.filter( ~(~Q(pk__in=[]) & Q(foo="bar")) | Q(hello="world") )
# simplifies condition to 'WHERE (NOT ("foo" = bar) OR "hello" = world)'
答案 2 :(得分:0)
实际上,Django QuerySet中有一个特殊的方法。
Model.objects.none()
始终返回空查询集,并且更易于理解。