2

私は少し困惑しており、データを表示するフィルターとして外部キーを使用して DetailView 機能を利用したいと考えています。基本的に、私のモデルは次のようになります。

class Category(models.Model):
    name = models.CharField(max_length=30)
    slug = models.SlugField(help_text="A short name for Category")

    def __unicode__(self):
       return self.name

    class Meta:
       ordering = ["-name"]
       verbose_name_plural = "categories"  


class Publisher(models.Model):
    name = models.CharField(max_length=30)
    slug = models.SlugField(help_text="A short name for Publisher")

    class Meta:
       ordering = ["-name"]

    def __unicode__(self):
        return self.name


class Book(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(help_text="A short name for book")
    pub_date = models.DateField()
    publisher = models.ForeignKey(Publisher)
    category = models.ForeignKey(Category)

    class Meta:
       ordering = ["-title"]

    def __unicode__(self):
       return self.title

私の Urls.py:

url(r'^categories/(?P<slug>[\w-]+)/$', DetailView.as_view(model=Category,template_name="books/category_detail" )),

私の Category_detail.html

{% block content %}
    <h2>{{ category.name}} </h2>
    <ul>       
    <li>Book Title: {{ book.title }}</li>
<li>Book publisher: {{ book.publisher }}</li>
    <li>Book Published Date: {{ book.pub_date }}</li>    
    </ul>
{% endblock %}

基本的に、category_detail.html に次の情報を表示したいと思います。

  • 種別名
  • 本のタイトル
  • 出版社名
  • 発行日
  • どんな助けでも大歓迎です。

    ありがとう - ケオコ

    4

    2 に答える 2

    2

    親切な対応ありがとうございます。次の情報を含む views.py ファイルを作成しました。

    from django.shortcuts import get_object_or_404
    from django.views.generic import ListView
    from mysite.books.models import *
    
    class BooksCategoryListView(ListView):
    
       context_object_name = "book_list"
    
       "get_queryset = query all the objects in the database"
        def get_queryset(self):
          category_slug = get_object_or_404(Category, slug=self.kwargs['slug'])
          return Book.objects.filter(category=category_slug)
    

    そして、アプリケーションの urls.py を更新しました:

    from django.conf.urls import patterns, url, include
    from django.views.generic import ListView, DetailView
    from mysite.books.views import BooksCategoryListView
    from mysite.books.models import *
    
    urlpatterns = patterns('',
       ...snip....        
       url(r'^categories/(?P<slug>[\w-]+)/$', BooksCategoryListView.as_view()),  
    )
    

    最後に、category_detail.html を次のように変更します。

    {% block content %}
    <h2>Book Details</h2>
    <ul>     
       <li>Category: {{ book.category}}</li> 
       <li>Title: {{ book.title }}</li>
       <li>Author: {{ book.authors }}</li>
       <li>Publisher: {{ book.publisher }}</li>
       <li>Published Date: {{ book.pub_date }}</li>            
    </ul>
    {% endblock %}
    
    于 2012-12-31T19:57:20.887 に答える
    1

    テンプレートには、カテゴリ オブジェクトがあります。本全体で反復できます。

    {% for book in category.book_set.all %}
       Book Title: {{ book.title }}
       Book publisher: {{ book.publisher }}
       Book Published Date: {{ book.pub_date }}
    {% endfor %}
    

    または最初の本だけ。

       Book Title: {{ category.book_set.all.0.title }}
       Book publisher: {{ category.book_set.all.0.publisher }}
       Book Published Date: {{ category.book_set.all.0.pub_date }}
    
    于 2012-12-31T13:09:48.553 に答える