2012-04-30 188 views
2

我有兩個模型:導演和電影。創建網絡查詢表

我想創建一個Web查詢表單,以便用戶可以搜索像「由導演史蒂芬斯皮爾伯格「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 %} 

而且從字符串製作datetime對象

編輯閱讀this:哦,我忘了urls.py和實際形式:)

在你的url.py中加入

在urlpatterns裏添加這樣的內容。

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

現在實際的搜索形式必須是這樣的:

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

你可以通過一個Django的形式產生,如果你的願望。 無論如何,這不會讓你遠離我猜。如果你正在做 什麼嚴重就像你想要讓你的用戶進行「刻面」的搜索,你不妨來看看爲haystack

+0

嗯,我希望我不必這樣做......如果最終用戶只選擇日期而沒有作者,會發生什麼?查詢是否會將所有書籍從1990年推到1998年? – thedeepfield

+0

那麼你提到的事情是我故意忽略的理智檢查:)但是,你怎麼能自動化呢?您所描述的邏輯不能被推斷,而不會有不靈活的假設。唯一需要討論/思考的東西就是放置邏輯的地方。在視圖內或者您的搜索表單中?你決定。 – rantanplan

1

嗯。我不相信像這樣的實用工具存在。如果存在反向的ModelForm,那將會很好。它會查看字段類型並獲取搜索表單的每個字段的數據範圍。

我覺得現在你被卡住創建一個文本框和一個日期選擇範圍。並在視圖中處理該數據。