2011-03-09 198 views
10

我需要在一組參數中查找數據 我正在構建一個小型預訂系統,它可以讓用戶查看哪些車輛可用於預訂他們的小型safari旅行。django date filter gte and lte

該系統具有預先輸入或由客戶預先輸入的預訂。

如果預訂的pickup_date = 2011-03-01dropoff_date = 2011-03-15,我跑在我的觀點pickup=2011-03-09dropoff=2011-03-14查詢如下,它不返回任何結果,看是否在該時段內的預訂成功。

views.py

def dates(request, template_name='groups/_dates.html'): 
    pickup=request.GET.get('pickup','None'); 
    dropoff=request.GET.get('dropoff','None'); 
    order = Order.objects.filter(pick_up__lte=pickup).filter(drop_off__gte=dropoff) 

    context = {'order':order,} 

    return render_to_response(template_name,context, 
     context_instance=RequestContext(request)) 

關於如何做到這一點有什麼建議? 或者我應該看看另一種運行此查詢的方式嗎?

+1

您想要在取件和取件之間返回預訂嗎?如果是這樣的話,它不應該是Order.objects.filter(pick_up__gte = pickup,drop_off__lte = dropoff),例如等於2011-03-09和2011-03-14之間的任何訂單?還是我誤解了要求? – JamesO 2011-03-09 12:02:08

+0

嗯,如果我是客戶,正在尋找一輛車,我的日期是2011-03-09,作爲取件,而2011-03-14,作爲下車,另一個訂票已經在系統上有一個日期2011-03-01,作爲代答,2011-03-15,作爲下降,我希望系統告訴我這個時間段已經完成。現在更有意義了嗎? – ApPeL 2011-03-09 12:20:53

+0

我總是建議使用表單來消毒輸入。 – 2017-03-04 20:47:44

回答

17

是否可能是因爲您將原始字符串傳遞給查詢集的格式不正確,請嘗試將字符串轉換爲日期時間對象。

稍後,您可以嘗試使用範圍查找在某些數據庫引擎上更高效,並且更易於閱讀和編碼。

from django.db.models import Q 

start_date = datetime.date(2005, 1, 1) 
end_date = datetime.date(2005, 3, 31) 
orders = Order.objects.filter(drop_off__gte=start_date, pick_up__lte=end_date) 
# Or maybe better 
orders = Order.objects.filter(Q(drop_off__gte=start_date), Q(pick_up__lte=end_date))