티스토리 뷰
반응형
Search - 여러개의 필드로 검색하기
사용하는 객체가 여러 개의 데이터 필드를 가지고 있는 경우, 여러 필드를 사용해서 검색할 수 있다. 또한, 키워드 뿐 아니라 각각의 필드가 가지고 있는 데이터를 불러와 선택해서 검색한다.
Web Search View - 사용자 검색 화면 설정
데이터베이스에서 각 필드의 유니크한 데이터를 가져온다. 이렇게 수집된 데이터를 context 를 통해서 화면으로 보낸다
search form template ( 화면 구성)
search 버튼을 클릭하면 검색데이터와 함께 search url 을 호출하게 된다.
- 각 필드는 가져온 데이터를 가지고 옵션을 만든다.
<form action="{% url 'search' %}" method="">
<!-- keyword search -->
<div class="form-group">
<input type="text" name="keyword" placeholder="Search by name" class="form-control">
</div>
<div class="form-group">
<select class="form-control search-fields" name="model">
<option selected="true" disabled="disabled">Model</option>
{% for model in model_search %}
<option value="{{model}}">{{model}}</opton>
{% endfor %}
</select>
</div>
<div class="form-group">
<select class="form-control search-fields" name="city">
<option selected="true" disabled="disabled">Location</option>
{% for city in city_search %}
<option value="{{city}}">{{city}}</opton>
{% endfor %}
</select>
</div>
<div class="form-group">
<select class="form-control search-fields" name="year">
<option selected="true" disabled="disabled">Year</option>
{% for year in year_search %}
<option value="{{year}}">{{year}}</opton>
{% endfor %}
</select>
</div>
<div class="form-group">
<select class="form-control search-fields" name="body_style">
<option selected="true" disabled="disabled">Body Style</option>
{% for body in body_style_search %}
<option value="{{body}}">{{body}}</opton>
{% endfor %}
</select>
</div>
<div class="range-slider clearfix">
<label>Price</label>
<div data-min="0" data-max="150000" data-min-name="min_price" data-max-name="max_price" data-unit="USD" class="range-slider-ui ui-slider" aria-disabled="false"></div>
<div class="clearfix"></div>
</div>
<div class="form-group">
<button class="btn btn-block button-theme btn-md">
<i class="fa fa-search"></i> Search
</button>
</div>
</form>
검색 실행 시 보여지는 url 정보
- 입력한 정보의 데이터만 url로 전송된다. search 에서는 이 정보를 바탕으로 검색한다.
Search view - 서버 데이터 검색
url 요청 정보를 이용해서 데이터 검색을 수행한다.
- 필드별로 요청 정보를 확인해서 검색
def search(request):
cars = Car.objects.order_by('-created_date').all()
if 'keyword' in request.GET:
keyword = request.GET['keyword']
if keyword:
cars = cars.filter(description__icontains=keyword)
if 'model' in request.GET:
model = request.GET['model']
if model:
cars = cars.filter(model__iexact=model)
if 'city' in request.GET:
city = request.GET['city']
if city:
cars = cars.filter(city__iexact=city)
if 'year' in request.GET:
year = request.GET['year']
if year:
cars = cars.filter(year__iexact=year)
if 'body_style' in request.GET:
body_style = request.GET['body_style']
if body_style:
cars = cars.filter(body_style__iexact=body_style)
if 'min_price' in request.GET:
min_price = request.GET['min_price']
max_price = request.GET['max_price']
if max_price:
cars = cars.filter(price__gte=min_price, price__lte=max_price)
context = {
'cars': cars,
}
목 차
'Django(장고) > Django Q&A' 카테고리의 다른 글
Django - 검색(Search) 기능 구현하기 (0) | 2021.01.03 |
---|---|
Django - 페이지 설정 ( paginator 사용하기) (0) | 2021.01.03 |
django - urls.py root 페이지 만들기 (0) | 2020.12.17 |
django - URL 설정하기 (0) | 2020.12.15 |
django - 새로운 장고앱 만들기 (0) | 2020.12.14 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 디스크 사용량
- 파이썬
- Python
- venv
- 장고
- df 명령어
- channel oauth
- angular
- vscode
- 팀 소통
- python slack
- win7
- win10
- 미밴드4
- cmd실행
- http 요청
- END key
- HOME key
- amaztools
- django
- 미밴드
- python message
- HOME/END
- cmd창
- Karabiner-Elements
- du 명령어
- webhook
- slack api
- 메시지 전송
- 프로젝트 생성
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함