繁体   English   中英

如何从具有多个过滤器的模型中获取对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM