python – 具有可变数量的过滤器参数的Django查询
作者:互联网
我有一个基于某些条件从MyModel获取的Django查询:
if beta:
MyModel.object.filter(x=alpha, y=beta)
else:
MyModel.object.filter(x=alpha)
是否有可能消除if beta:check并在一行中执行,即仅在beta不是时才在y上进行查询过滤
这是一个很好的(Djangonic)方式:
MyModel.object.filter(**{'x':alpha, 'b':beta} if beta else **{'x':alpha})
或者是否可以做这样的事情(我知道以下是错误的,但是可以修复它以给出正确的含义吗?):
MyModel.object.filter(Q('x'=alpha) & (beta && Q('y'=beta)))
解决方法:
在这种情况下,我正在使用如下解决方案:
filter_kwargs = {'x': alpha}
if beta:
filter_kwargs['y'] = beta
MyModel.objects.filter(**filter_kwargs)
当新条件进入项目要求时,它很容易扩展,但不幸的是它不是单线解决方案.
标签:python,django,django-queryset 来源: https://codeday.me/bug/20190830/1770710.html