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
等于 false
或 true
并且其第三个块既不为真也不为假
任何人都可以建议我实现此目标的最佳方法吗?
你可以这样编码:
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))
我正在寻找一种用更少的代码实现过滤器的方法,例如,我当前的过滤器在下面工作正常:
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
等于 false
或 true
并且其第三个块既不为真也不为假
任何人都可以建议我实现此目标的最佳方法吗?
你可以这样编码:
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))