[英]How to to get objects from the model with multiple filters?
我在从模型中检索数据时遇到了一些问题。 在我的HTML上,我有一个表单,其中有多个数据过滤器,例如:我有质量和表示变量,用户选择他要过滤的方式,然后以“ key1 = value1&key2 = value2”的格式发送查询”之类的东西。 我的问题是,在视图中,我不知道如何使用它来过滤数据。
我有这个小代码来给查询格式
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])
我用这个来创建一个带有要过滤的数据的字典,但是,如何才能获得该字典的变量呢?
我的意思是
Products.objects.get(filt)
其中filt是一个变量,其中我只留下了非空列表。
我知道,如果我手动进行操作,将会像
Products.objecs.get(quality__in = filt['quality'], presentation__in = filt['presentation'], color__in = filt[''color])
但是我不想这样,因为如果用户没有为任何值设置一个值,那么它将是字典上的一个空列表,这将使搜索失败,因为使用null搜索未设置的属性,而不是不搜索它。
顺便说一下,用户可以为过滤器中的一个变量设置多个参数,即质量= [1,2]。
发表我的评论以作为将来读者的答案(可能从一开始就应该这样做)。
要将字典解压缩为Django中的filter调用,请执行以下操作:
Product.objects.filter(**filt)
诀窍是字典的字段需要映射到对象的字段。 因此,如果您的值是列表,则可以进行以下操作:
{ "<field_name>__in": [] }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.