Django 过滤器:寻找最佳实践

Django filter: Finding a best practice

我正在寻找一种用更少的代码实现过滤器的方法,例如,我当前的过滤器在下面工作正常:

if company == 1:
    unknownFood = food.filter(
        purchase__credit = 2
        company__name__isnull=True
    )
elif company == 2:
    unknownFood = food.filter(
        purchase__credit = 2
        company__name__isnull=False
    )
else:
    unknownFood = food.filter(
        purchase__credit = 2
    )

以上代码出现了很少的重复代码行,我认为这不是最佳做法。

我正在尝试使用比上面代码更少的行代码来实现这一点。

给你:

if company == 1:
    isNull = True
elif company == 2:
    isNull = False
else:
    pass

unknownFood = food.filter(
        purchase__credit = 2
        company__name__isnull=isNull
    )

如果我喜欢上面的缩短方式,它会给我一个错误,因为

company__name__isnull 等于 falsetrue 并且其第三个块既不为真也不为假

任何人都可以建议我实现此目标的最佳方法吗?

你可以这样编码:

unknownFood = food.filter(purchase__credit=2)

if company == 1:
    unknownFood = unknownFood.filter(company__name__isnull=True)
elif company == 2:
    unknownFood = unknownFood.filter(company__name__isnull=False)

在您编写的简短代码中,变量 isNull 可以是未定义的,它会在您的代码中导致异常。你可以这样解决这个问题:

unknownFood = food.filter(purchase__credit = 2)

if company in [1,2]:
    unknownFood = unknownFood.filter(company__name__isnull=(company==1))