Django中的动态过滤器 [英] Dynamic filter in Django

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

问题描述

在我的应用中,我有一个表格。根据表单的不同,用户可以配置一个或多个过滤器。

In my app, I have a form. Depending of the form, one or many filters could be configured by the user.

在我看来,我举例来说:

In my view, I have for exemple :

query = Test.objects.filter(filter1 = request.post['filter1'], filter2 = request.post['filter2'], filter3 = request.post['filter3'])

因此,有时filter1,filter2或filter3不存在。

So, sometimes filter1, filter2 or filter3 could not exist.

如果不存在任何过滤器,我只想忽略该过滤器。

If any filters doesn't exist, I just want to ignore the filter.

我可以用很多 IF条件,但可能有一个明智的解决方案?

I could do a script with many "IF" conditions but may be there is a smart solution ?

感谢您的帮助!

推荐答案

您可以执行以下操作:

filters = {}

for key, value in request.post.items():
    if key in ['filter1', 'filter2', 'filter3']:
        filters[key] = value

Test.objects.filter(**filters)

其中的列表是你想要的钥匙

Where the list is a list of keys that you are intending to filter by

编辑

正如 Thomas Junk 所建议的那样,您可以通过以下方法使其变得更加整洁:

As Thomas Junk suggested you can make it a lot cleaner with a comprehension:

filters = {
    key: value
    for key, value in request.post.items()
    if key in ['filter1', 'filter2', 'filter3']
}

Test.objects.filter(**filters)

这篇关于Django中的动态过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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