use*_*ser 4 python django django-queryset
我有一个MyModel基于某些条件从中获取的Django查询:
if beta:
MyModel.object.filter(x=alpha, y=beta)
else:
MyModel.object.filter(x=alpha)
Run Code Online (Sandbox Code Playgroud)
是否有可能取消if beta:检查并在一行中完成检查,即y仅在beta未检查时才打开查询过滤器None
这是一种好方法(Djangonic):
MyModel.object.filter(**{'x':alpha, 'b':beta} if beta else **{'x':alpha})
Run Code Online (Sandbox Code Playgroud)
还是有可能做这样的事情(我知道以下错误,但是可以修正以给出正确的含义吗?):
MyModel.object.filter(Q('x'=alpha) & (beta && Q('y'=beta)))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将使用以下解决方案:
filter_kwargs = {'x': alpha}
if beta:
filter_kwargs['y'] = beta
MyModel.objects.filter(**filter_kwargs)
Run Code Online (Sandbox Code Playgroud)
当新的条件进入项目需求时,很容易扩展,但是不幸的是,它不是单线解决方案。
在我看来这不是一个好的解决方案。我在阅读和理解代码时遇到问题。
你也可以这样做:
objects_ = MyModel.objects.filter(x=alpha, y=beta) if beta else MyModel.objects.filter(x=alpha)
return objects_
Run Code Online (Sandbox Code Playgroud)
对我来说它更干净..但这只是我的意见。
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |