ディレクターとフィルムの 2 つのモデルがあります。
ユーザーが「1990 年から 1998 年までの『スティーブン スピルバーグ』監督のすべての映画」などを検索できるように、Web クエリ フォームを作成したいと考えています。
これを行うための最良かつ最も簡単な方法が何であるかに興味がありますか?
ありがとう、
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 %}
文字列からの日時オブジェクトの作成についてもお読みください
編集:ああ、urls.pyと実際のフォームを忘れていました:)
url.py で、urlpatterns 内にこのようなものを追加します。
url(r'^search/$', 'myapp.views.search'),
実際の検索フォームは次のようになります。
<form method='GET', action='/search/'>
... your fields
</form>
必要に応じて、django フォームから生成できます。とにかく、これはあなたを遠くに連れて行くつもりはないと思います。何か深刻なことをしている場合は、干し草の山を調べてみてください
うーん。このようなユーティリティは存在しないと思います。逆のModelFormがあればいいのに。フィールド タイプを調べて、検索フォームの各フィールドのデータ範囲を取得します。
現在、テキスト ボックスと日付ピッカー範囲の作成に行き詰まっていると思います。そして、そのデータをビューで処理します。
ユーザーに「ファセット」検索を実行させたいようです。DjangoHaystackはそれを可能にします。彼らのドキュメントには、ファセットに関する情報が含まれています。