建立好資料庫之後,我們今天要來完成初步的篩選器功能。
目標是藉由勾選左側的一個Tag,可以找到符合該條件的餐廳。
首先我們觀察在form_filter.html
裡面,會怎麼把勾選的內容存進Request
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" name="food_style" value={{tag.style}}>
<label class="form-check-label" for="inlineCheckbox1">{{tag.name}}</label>
</div>
這邊可以看input
的部分,資料會以字典的形式存進Request中,name
可以視為字典的key,value
就是對應到的值。
view.py
在view.py
裡面找到index
的function,我們會發現每次呼叫都會收到一個request
,也就是網站的請求。這部分詳細的細節可以參考這篇文章:
Request and response objects | Django documentation | Django
而現在我們只需要知道,當使用者按下搜尋鍵時,網站就回傳送一個新的request
給view,請求新的資料,因此這個request
是屬於GET
。
在原有的function內加入以下程式碼
try:
if request.GET['food_style']:
places = Place.objects.filter(tags__style=request.GET['food_style'])
except Exception:
pass
這裡的’food_style’
就是剛剛在index.html
裡面看到的name
,因此我們使用filter
的功能,設定tags__style
表示撈出每個place
中tags
的資料,如果有tag的style
與request
中的value
相同,則回傳此間place
。
Template中真的是滿滿的坑啊QAQ有機會把所有經歷過的災難整理成一篇文章給大家避雷。
Request and response objects | Django documentation | Django
台南不需要米其林
- 專案網址
- 專案程式碼
- 專案文件與鐵人賽文章
- 參賽團隊 台南巷弄美食獵人