使用通配符在Django中进行查询集过滤

时间:2017-07-24 19:26:06

标签: django django-queryset

我的数据库中有三列(var1,va2和var3)。

在html页面上,用户可以输入var1,var2或var3的值或三个变量的组合(例如,仅为var1和var3或var2和var3提供数据)。

我的查询搜索是:

Rule.objects.filter(var1=user_var1, var2=user_var2, var3=user_var3, )

如果用户输入所有三个变量的值,这非常简单。

如果用户输入两个或一个变量的值,我希望查询集过滤器仅匹配用户输入值的列。例如:用户输入了var2和var3的数据。结果搜索将是:

Rule.objects.filter(var2=user_var2, var3=user_var3, )

但是有没有办法将所有三个变量保留在过滤器代码中,如下所示:

if user_var1 = null, then user_var1=[wildcard or all]

Rule.objects.filter(var1=user_var1, var2=user_var2, var3=user_var3, )

2 个答案:

答案 0 :(得分:2)

如果提供的值另外返回所有查询集,则准备要应用的过滤器的dict:

filters = {}
if user_var1:
    filters['var1'] = user_var1
if user_var2:
    filters['var2'] = user_var2
qs = Rule.objects.filter(**filters)

答案 1 :(得分:2)

可能是或像之前的回答一样

filter_vars = ['vars1', 'vars2', 'vars3']
filter_dic = {}
for item in filter_vars:
    user_var = request.GET.get(item, '')
    if user_var:
       filter_dic[item] = user_var
Rule.objects.filter(**filter_dic)
相关问题