如何使用多个过滤器从模型中获取对象?

时间:2017-02-25 16:53:46

标签: python django

我从模型中检索数据时遇到一些问题。在我的HTML上我有一个表格,我可以在其中获得多个数据过滤器,例如:我有质量和演示文稿变量,用户选择他想要过滤的方式,我发送的格式为' key1 =值1&安培;键2 =值'和那样的事情。我的问题是,在视图中,我不知道如何使用它来过滤数据。

我有这个小代码来为查询提供格式

filt = {'quality':[],'presentation':[], 'color':[]}
quer1 = request.POST.get('value');
print quer1
quer = quer1.split('&')
for i in quer:
    val = i.split('=')
    filt[val[0]].append(val[1])

有了这个,我创建了一个带有要过滤的数据的字典,但是,我怎么能用dict的变量来获取?

我的意思是

Products.objects.get(filt)

其中,fil将是一个变量,其中我只留下非空列表。

我知道如果我手动制作它会像

那样
Products.objecs.get(quality__in = filt['quality'], presentation__in = filt['presentation'], color__in = filt[''color])

但是我不想这样做,因为如果用户没有为任何值设置值,那么它将是dict上的空列表,这将使搜索失败,因为想要使用null搜索未设置的属性,而不是搜索它。

顺便说一句,用户可以为过滤器中的一个变量设置多个参数,我的意思是质量= [1,2]。

1 个答案:

答案 0 :(得分:2)

发表我的评论作为未来读者的答案(可能应该首先开始)。

要将字典解压缩到Django中的过滤器调用,请执行以下操作:

Product.objects.filter(**filt)

技巧是字典的字段需要映射到对象的字段。因此,如果您的值是列表,那么以下内容将起作用:

{ "<field_name>__in": [] }