聰明的方法我缺少CS和缺乏經驗的實在是嶄露頭角的這一刻。我從來沒有真正處理過濾結果服務器端。我在想這不是正確的做法。我使用Django ....過濾服務器端
首先,我認爲我可以通過保持此驗證我的形式定義保持乾燥。接下來,我擔心我的鏈式過濾器語句。在這一點上,使用Q複數查找有多重要,而不是鏈接過濾器?我只是建立一個原型,並且我認爲我最終必須尋找一種比全文搜索更強大的搜索解決方案。
我的大問題,現在(除了代碼並明確了效率低下的長度)是,我不知道如何處理我的房間和工作人員的投入,這是選擇的形式。如果用戶沒有選擇一個值,我想從流程服務器端刪除這些過濾器。我應該爲這些結果創建兩個單獨的有條件的查找系列嗎?
def search(request):
if request.method=='GET' and request.GET.get('region',''):
neighborhoods=request.GET.getlist('region')
min_rent=request.GET.get('min_cost','0')
min_rent=re.sub(r'[,]','',min_cost) #remove any ','
if re.search(r'[^\d]',min_cost):
min_cost=0
else:
min_cost=int(min_cost)
max_cost=request.GET.get('max_cost','0')
max_cost=re.sub(r'[,]','',max_cost) #remove any ','
if re.search(r'[^\d]',max_cost):
max_cost=100000
else:
max_cost=int(max_rent)
date_min=request.GET.get('from','')
date_max=request.GET.get('to','')
if not date_min:
date=(str(datetime.date.today()))
date_min=u'%s' %date
if not date_max:
date_max=u'2013-03-18'
rooms=request.GET.get('rooms',0)
if not rooms:
rooms=0
workers=request.GET.get('workers',0)
if not workers:
workers=0
#I should probably use Q objects here for complex lookups
posts=Post.objects.filter(region__in=region).filter(cost__gt=min_cost).filter(cost__lt=max_cost).filter(availability__gt=date_min).filter(availability__lt=date_max).filter(rooms=rooms).filter(workers=workers)
#return HttpResponse('%s' %posts)
return render_to_response("website/search.html",{'posts':posts),context_instance=RequestContext(request))
這裏有很多很好的信息。老實說,我已經閱讀了django文檔,並且我沒有意識到查詢方法可能需要多個參數(使用Q之外)。我不知道過濾器可以拿字典。 – Ben 2011-03-18 16:14:44
非常感謝Yuji – Ben 2011-03-18 16:15:44
嘿布倫丹,沒問題!該查詢不是取字典,「**」將字典擴展爲關鍵字 - 參數對,因此就該方法而言,它是通過關鍵字參數傳遞的,而不是字典。最後一個技巧對動態查詢非常有用! – 2011-03-18 16:22:58