我有以下观点:
def search_events(request):
term = request.GET.get('term', '')
adminDivision = request.GET.get('adminDivision', '')
events = Event.objects.filter(event_name__icontains=term, city__admin1=adminDivision)
data= serializers.serialize('json', events);
return HttpResponse(data, content_type='application/json')
它可以从请求,术语和adminDivision接收2个参数,然后在数据库上进行搜索。
现在它的工作方式是,当其中一个是空的,term或adminDivision时,我得不到任何结果,因为所有对象对这些字段都有一些价值。
我想要的是,如果一个或两个过滤器都为空,则不要应用该过滤器。
实施例, 如果我有这些对象:
目前term=foo
(没有adminDivision值),我没有得到任何结果,但我希望它能返回第一个和第三个。
如果这两个值都是空的,我也没有得到任何结果,而且我想拥有它们。
有没有一种优雅的方法来实现这一目标?
谢谢!
答案 0 :(得分:1)
由于您在过滤器中执行了AND
查询,因此无法获得结果。试试这样:
def search_events(request):
term = request.GET.get('term', '')
adminDivision = request.GET.get('adminDivision', '')
events = Event.objects.all()
if term:
events = events.filter(event_name__icontains=term)
if adminDivision:
events = events.filter(city__admin1=adminDivision)
data= serializers.serialize('json', events);
return HttpResponse(data, content_type='application/json')
或者:
from django.db.models import Q
...
events = Event.objects.filter(Q(event_name__icontains=term)|Q(city__admin1=adminDivision))
...