2012-04-30 2 views
2

두 가지 모델, Director 및 Film이 있습니다.웹 쿼리 양식 만들기

사용자가 "1990 년과 1998 년 사이에 감독 '스티븐 스필버그'의 모든 영화를 검색 할 수 있도록 웹 쿼리 양식을 만들고 싶습니다.

이 작업을 수행하는 가장 쉽고 간단한 방법은 무엇일까요? 감사합니다,

+0

나는 당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 매개 변수로 GET 요청을 처리하고 있습니까? 데이터베이스에 대한 질의? 양자 모두? 다른 것? – rantanplan

+0

데이터베이스에 쿼리를하면 같은 결과를 얻을 수 있다고 생각하십니까? – thedeepfield

답변

6

OK 가장 간단한 해결책은 그런 것입니다.

모델의 구조에 대해 몇 가지 가정을하고 있으므로 을 적절하게 조정하십시오.

은의이 우리의 models.py

from django.db import models 

class Director(models.Model): 
    name = models.CharField(max_length=128) 
    # maybe some other fields... 

class Film(models.Model): 
    title = models.CharField(max_length=128) 
    director = models.ForeignKey(Director) 
    created_at = models.DateField() 

우리의 순진 views.py 내가 의도적으로 많은 정신 검사를 생략 명심하십시오입니다 가정 해 봅시다.

import datetime 
from django.shortcuts import render_to_response 
from myapp.models import Film 

def search(request): 
    # Suppose we support these params -> ('director', 'fromdate', 'todate') 
    request_params = request.GET.copy() 
    fromdate = datetime.datetime.strptime(request_params['fromdate'], 'some-string-format') 
    todate = datetime.datetime.strptime(request_params['todate'], 'some-string-format') 
    # Our query is ready to take off. 
    film_results = Film.objects.filter(
     director__name=request_params['director'], 
     created_at__range=(fromdate, todate) 
    ) 
    return render_to_response('search_results.html', {'results':film_results}) 

우리 search_results.html 템플릿은

{% extends some_base.html %} 
{% if results } 
    {% for film in results %} 
    <h3>{{ film.title }}</h3> 
    <p>Director: {{ film.director.name }}</p> 
    <p>When: {{ film.created_at }}</p> 
    {% endfor %} 
{% else %} 
    <p>Sorry no results for your query</p> 
{% endif %} 

또한 문자열에서

편집을 날짜 객체를 만드는 방법에 대한 this 읽기 : 나는 urls.py과 실제 형태 :

잊어 오 url.py의

은 url 패턴 안에 다음과 같이 추가합니다. 원하는 경우

<form method='GET', action='/search/'> 
... your fields 
</form> 

당신은 장고 양식을 통해 생성 할 수 있습니다

url(r'^search/$', 'myapp.views.search'), 

이제 실제 검색 양식은 다음과 같이해야합니다. 어쨌든 이것은 당신을 멀리 얻지 못할 것입니다. 심각한 일을하는 경우 haystack

+0

흠, 나는이 모든 것을 할 필요가 없을 것이라고 기대했다 ... 최종 사용자 만 날짜를 선택하고 저자가 없다면 어떻게 될까? 쿼리를 통해 1990 년에서 1998 년까지 모든 책을 가져올 수 있습니까? – thedeepfield

+0

당신이 언급 한 것들은 내가 고의적으로 무시한 온전한 체크이다. 그러나 어떻게 이것을 자동화 할 수 있습니까? 설명 된 논리는 유연하지 않은 가정없이 유추 할 수 없습니다. 토론/사고가 필요한 유일한 것은 논리를 어디에 둘 것인지입니다. 보기 내부 또는 검색 양식에 있습니까? 당신이 결정합니다. – rantanplan

1

이런 유틸리티가 존재하지 않는다고 나는 믿는다. 리버스 ModelForm이 있다면 좋을 것입니다. 필드 유형을 살펴보고 검색 양식의 각 필드에 대한 데이터 범위를 가져옵니다.

지금 생각해 보면 텍스트 상자와 datepicker 범위를 만드는 데 어려움이 있습니다. 그리고 그 데이터를 하나의 관점에서 처리합니다.

0

사용자가 "면 처리"검색을 수행 할 수 있도록하려는 것처럼 들립니다. Django Haystack하면 그렇게 할 수 있습니다. 해당 설명서에는 faceting에 대한 정보가 들어 있습니다.