我很困惑,并希望使用外键作为我的过滤器来显示数据的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中显示以下信息:
任何帮助都将不胜感激。
谢谢 - Keoko
答案 0 :(得分: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 %}
答案 1 :(得分: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 }}