我从模型中检索数据时遇到一些问题。在我的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]。
答案 0 :(得分:2)
发表我的评论作为未来读者的答案(可能应该首先开始)。
要将字典解压缩到Django中的过滤器调用,请执行以下操作:
Product.objects.filter(**filt)
技巧是字典的字段需要映射到对象的字段。因此,如果您的值是列表,那么以下内容将起作用:
{ "<field_name>__in": [] }