簡體   English   中英

Django模型過濾空字符串

[英]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時,我得不到任何結果,因為所有對象對這些字段都有一些價值。

我想要的是,如果一個或兩個過濾器都是空的,那么不要應用該過濾器。

例如,如果我有這些對象:

  • [event_name ='foo',adminDivision ='1']
  • [event_name ='bar',adminDivision ='2']
  • [event_name ='foo bar',adminDivision ='3']

對於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM