具有可变数量的过滤器参数的Django查询 [英] Django query with variable number of filter arguments

查看:66
本文介绍了具有可变数量的过滤器参数的Django查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个基于某些条件从 MyModel 获取的Django查询:

I have a Django query that fetches from MyModel based on certain conditions:

if beta:
    MyModel.object.filter(x=alpha, y=beta)
else:
    MyModel.object.filter(x=alpha)

是否可以消除 if beta:检查并在一行中完成,即仅当 beta y 进行查询过滤>不是 None

Is it possible to eliminate the if beta: check and do it in a single line i.e. make the query filter on y only when beta is not None

这是一种好方法(Djangonic):

Is this a good (Djangonic) way:

MyModel.object.filter(**{'x':alpha, 'b':beta} if beta else **{'x':alpha})

还是可以做这样的事情(我知道以下错误,但是可以修正以给出正确的含义吗?):

Or is it possible to do something like this (I know the following is wrong, but can it be fixed to give the correct meaning?):

MyModel.object.filter(Q('x'=alpha) & (beta && Q('y'=beta)))

推荐答案

在这种情况下,我使用的解决方案如下:

In such situations I'm using solution like below:

filter_kwargs = {'x': alpha}
if beta:
    filter_kwargs['y'] = beta

 MyModel.objects.filter(**filter_kwargs)

当新的条件进入项目需求时,很容易扩展,但是不幸的是,它不是一种单线解决方案.

It is easy to expand when new conditions come in into the project requirements, but unfortunately its not a one-liner solution.

这篇关于具有可变数量的过滤器参数的Django查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆