将额外参数添加到Objects.filter(通过Dict)?

时间:2009-11-19 14:06:00

标签: django filter

假设我们有dvd表格,我们要搜索price=14.99rating=18。我们可以这样做:

#Making some dictionary
dict1 = {}

#Adding some stuff
dict1['price']=14.99
dict1['rating']18

#Use dict as filter
dvd.objects.filter(**dict1)

有没有办法添加额外的参数,如:

dvd.objects.filter(title__icontains='the')

我只想为用户增加一点灵活性,因为目前他们可以选择他们想要搜索的字段并准确指出他们想要的内容。但是,我想搜索部分匹配,例如__icontains。我也想__gt__lt

这可能吗?

2 个答案:

答案 0 :(得分:7)

而不是:

dict['price'] = 14.99

你可以这样做:

dict['price__gte'] = 10
dict['price__lte'] = 15

当您使用** kwargs时,以下内容完全相同:

Model.objects.filter(price__gte=10, price__lte=15)
# or
kwargs = {'price__gte': 10,
          'price__lte': 15}      
Model.objects.filter(**kwargs)

答案 1 :(得分:3)

我不确定你想做什么?是否要在初始dvd.objects.filter(**dict1)之后过滤其他字段?如果是这样,你可以这样做:

qs = dvd.objects.filter(**dict1)
qs.filter(title__icontains='the')

请记住,filter会返回一个查询集,以便您可以执行所需的任何操作,就像在dvd.objects上一样。

如果您想要将icontains添加到dict中的内容,那么您只需将dict1中的密钥指定为price__icontains而不是{{} 1}}。