我有以下观点:
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')
它可以从请求中接收 2 个参数,term 和 adminDivision,然后在 DB 上进行搜索。
它现在的工作方式是,当其中一个为空、term 或 adminDivision 时,我不会得到任何结果,因为所有对象对这些字段都有一些值。
我想要的是,如果一个甚至两个过滤器都为空,则不要应用该过滤器。
例子,
如果我有这些对象:
目前使用
term=foo
(没有 adminDivision 的值),我没有得到任何结果,但我希望它返回第一个和第三个。两个值都为空,我也没有得到任何结果,我想拥有所有这些。
有没有一种优雅的方法来实现这一目标?
谢谢!
最佳答案
您没有得到结果,因为您正在过滤器中执行 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))
...
关于python - Django 模型过滤器由一个空字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32467298/