【问题标题】:Django DetailView Filter by Foreign KeyDjango DetailView 按外键过滤
【发布时间】:2012-12-15 01:47:46
【问题描述】:

我有点困惑,想利用 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

    【问题讨论】:

      标签: django foreign-keys detailview


      【解决方案1】:

      感谢您的友好回复。我创建了一个包含以下信息的 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 %}
      

      【讨论】:

        【解决方案2】:

        在模板中你有类别对象。您可以遍历所有书籍;

        {% 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 }}
        

        【讨论】:

          猜你喜欢
          • 2013-09-04
          • 2012-07-15
          • 2021-06-25
          • 1970-01-01
          • 2018-12-29
          • 2012-07-30
          • 2012-03-13
          • 2020-06-01
          • 2020-09-07
          相关资源
          最近更新 更多