为什么空Django QuerySet的真值不等于None?
空QuerySet与None的区别说明
空QuerySet和None是完全不同的对象,所以你看到queryset is None返回False是正常行为:
Foo.objects.all()无论是否查询到数据,返回的都是**FooQuerySet的实例**——哪怕结果为空,它依然是一个合法的QuerySet对象,只是内部没有数据。None表示的是“不存在任何对象”,和“存在一个空的集合对象”是两个概念。
正确判断空QuerySet的方式
如果你要检查QuerySet是否没有数据,直接用布尔判断即可:
queryset = Foo.objects.all() if not queryset: # 这里处理空QuerySet的逻辑 print("QuerySet里没有数据")
什么时候用is None
只有当你需要区分“没有返回QuerySet对象”和“返回了空QuerySet”时,才需要判断is None,比如:
def fetch_foos(filter_condition=None): if filter_condition is None: return None # 没有条件时返回None return Foo.objects.filter(**filter_condition) result = fetch_foos() if result is None: print("没有执行查询") elif not result: print("查询执行了,但没有匹配的数据")
内容的提问来源于stack exchange,提问作者23rdpro
相关产品推荐
相关产品推荐

