首页 > 解决方案 > 仅当变量不为空时,Django 过滤查询集

问题描述

我有一个查询集,它按 2 个变量过滤

family = ModelsClass.objects.filter(foo=var1).filter(bar=var2)

如果 var1 和 var2 不为 null,则一切正常,但 var1 和 var2 可以为 Null。在这种情况下,我需要排除 Null 。

例如,如果 var1 为 Null,则它必须仅按 var2 过滤,反之亦然。

有没有办法在过滤器查询集或其他东西中插入 if 条件?

标签: pythondjangodjango-queryset

解决方案


你为什么不检查变量是否为空然后过滤它?您不必在一行中完成。Django 的查询集对象是惰性求值的,您可以在单独的行中过滤或执行其他操作。

family_queryset = ModelClass.objects.all()

if var1:
    family_queryset = family_queryset.filter(foo=var1)

if var2:
    family_queryset = family_queryset.filter(bar=var2)

推荐阅读