如何在Django中有效地查询“any”?

时间:2017-09-18 03:12:17

标签: django any

例如,查询是:

Angular 2

如果其中一个 a b c 是“任意”,该怎么办?

我的意思是如果我从前端收到a =“Any”,我应该如何在过滤器中有效地释放这个限制?

2 个答案:

答案 0 :(得分:2)

您可以创建一个函数来从参数构建Q object

def _get_filter(name, value):
    return Q() if value == 'Any' else Q((name, value))

并将它们与&合并:

q = (
    _get_filter('country', request.GET['country']) &
    _get_filter('name', request.GET['name']) &
    _get_filter('title', request.GET['title'])
)

result = models.Data.objects.filter(q)

如果可能的话,我还会得到请求的来源(前端?)来发送一个更好的值来表示“Any”,就像一个空字符串。

答案 1 :(得分:0)

您不必在单个查询中执行所有操作。一切都完成后才会运行查询。

您可以使用:

result = models.Data.objects.all()

if a != 'any':
    result = result.filter('country' = a)
if b != 'any':
    result = result.filter('name' = b)
if c != 'any':
    result = result.filter('title' = c)
...

查询不会对数据库运行,直到所有内容都完成,所以这实际上并没有添加任何额外的查询。