[英]Django model filter by an empty string
我有以下觀點:
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的值),我沒有得到任何結果,但我希望它返回第一個和第三個。
兩個值都是空的,我也沒有得到任何結果,我想擁有它們。
有一種優雅的方式來實現這一目標嗎?
謝謝!
由於您在過濾器中執行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))
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.