假设我们有dvd
表格,我们要搜索price=14.99
和rating=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
。
这可能吗?
答案 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}}。