汎用ビュー

記憶は削除の方向で - Djangoのジェネリックビューで検索結果を表示してみる
http://d.hatena.ne.jp/re_guzy/20070324/p1

になんか高度なお話しが書いてあったので
views.pyを書いてしまいますがこんなのどうでしょうか。

views.py

from django.views.generic import list_detail

from models import Book

def search_auther(request, author_id):
    books = Book.objects.filter(authors__id=author_id)

    return list_detail.object_list(request, queryset=books)

urls.py

from django.conf.urls.defaults import *

from views import search_auther

urlpatterns = patterns('',
    (r'^book/author/(?P<author_id>\d+)/$', search_auther),
)

models.py

from django.db import models

class Author(models.Model):
    name = models.CharField(maxlength=200)

class Book(models.Model):
    name = models.CharField(maxlength=200)
    authors = models.ManyToManyField(Author)

book_list.html

{% block books %}

{% for object in object_list %}
    {{ object.name }}
    {% for author in object.authors.all %}
        {{ author.name }}
    {% endfor %}<br />
{% endfor %}

{% endblock books %}

一応動作確認済みです:-)
抽象化されていないのでなんともですが...
汎用ビューも意外に使えますよという紹介で。

さんぷる
さんぷる posted by (C)voluntas