請問各位大神 我使用django套件架站
前端用jquery ajax 搜集被選到的checkbox name和value
search = $('input:checkbox:checked').serialize() ;
$.getJSON("getcheckbox", { search },function(data){.....});
後端收到get傳來的參數
假設是 search?name1=value1&name2=value2...
不知怎麼帶入 model.objects.filter(欄位名="value") 搜尋資料庫
我想到的做法是 request.GET.get("search")取值為
name1=value1&name2=value2...
再用&和=切字串成 name1,value1,name2,value2...
帶入 model.objects.filter( name1=value1) 問題就來了
因為 name1 是一個變數名稱並不是寫死的欄位名 所以查無此欄位
請大神指點迷津!
1.你沒搞懂Django的request.GET,把他print出來吧。
應該會看到
<QueryDict: {'name1': ['value1'], 'name2': ['value2']}>
request.GET.get("search")不會得到東西。因為你的search是網址的一部份,不是GET的一部份。
2.python支援任意數量的參數,也可以把dict很輕易的轉變成參數,下面是範例code:
def testfun(**kargv):
print(kargv)
get_dict = request.GET.dict()
testfun(**get_dict)
不過通常我不會直接把GET轉換成dict直接餵,通常還得做欄位和資料格式驗證及轉換,天知道使用者會送啥進你server來。
http://www.wklken.me/posts/2013/12/21/how-to-use-args-and-kwargs-in-python.html
感謝froce大大指導 因為我是程式新手 不太懂怎麼轉換收到的值比較好 目前的作法如下 不知道效能會不會太差 或其他更好的方法
get_dict = request.GET.dict()
search = (get_dict["search"])
searchlist = search.split('&')
search_dic = {}
for atrr in searchlist:
name = atrr[0:atrr.find("=")]
value = atrr[atrr.find("=")+1 :]
search_dic[name]=value
results = Wheelchair.objects.all()
if "subsidy_type" in search_dic :
results = Wheelchair.objects.filter(subsidy_type = search_dic["subsidy_type"])
if "seat_width" in search_dic :
results = results.filter(seat_width=search_dic["seat_width"])
唉,我覺得我說了你看不懂,直接給你code,不過你自己好自為之:
get_dict = request.GET.dict()
result = Wheelchair.objects.filter(**get_dict)
search = (get_dict["search"])
這句你根本得不到東西,你也沒搞清楚Django的request.GET的結構是啥,根本也不用你自己去那樣處理GET字串,如果還得做那麼低階的處理,Django不會紅。
感謝大神 我再慢慢學習