我有兩個模型:導演和電影。創建網絡查詢表
我想創建一個Web查詢表單,以便用戶可以搜索像「由導演史蒂芬斯皮爾伯格「1990年和1998年之間的所有電影。」
只是好奇,要做到這一點的最好,最簡單的方法是什麼呢?
感謝,
我有兩個模型:導演和電影。創建網絡查詢表
我想創建一個Web查詢表單,以便用戶可以搜索像「由導演史蒂芬斯皮爾伯格「1990年和1998年之間的所有電影。」
只是好奇,要做到這一點的最好,最簡單的方法是什麼呢?
感謝,
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
嗯,我希望我不必這樣做......如果最終用戶只選擇日期而沒有作者,會發生什麼?查詢是否會將所有書籍從1990年推到1998年? – thedeepfield
那麼你提到的事情是我故意忽略的理智檢查:)但是,你怎麼能自動化呢?您所描述的邏輯不能被推斷,而不會有不靈活的假設。唯一需要討論/思考的東西就是放置邏輯的地方。在視圖內或者您的搜索表單中?你決定。 – rantanplan
嗯。我不相信像這樣的實用工具存在。如果存在反向的ModelForm,那將會很好。它會查看字段類型並獲取搜索表單的每個字段的數據範圍。
我覺得現在你被卡住創建一個文本框和一個日期選擇範圍。並在視圖中處理該數據。
聲音。 Django Haystack會讓你這樣做。其文檔包含有關faceting的信息。
我不確定你在問什麼。使用參數處理GET請求?在數據庫上進行查詢?都?還有別的嗎? – rantanplan
查詢數據庫,我猜他們可以是同一件事? – thedeepfield