在django模板中从多对多关系中检索信息

时间:2013-07-17 20:52:22

标签: django django-templates many-to-many django-views

我正在创建一个博客,并在帖子和类别之间建立多对多的关系。

class Category(models.Model):
    title = models.CharField(max_length=255)
    slug = models.SlugField()

    def __str__(self):
        return self.title

class Post(models.Model):
    title = models.CharField(max_length=255)
    subtitle = models.CharField(max_length=255,null=True,blank=True)
    published_date = models.DateTimeField(auto_now_add=True)
    draft = models.BooleanField(default=True)
    body = RichTextField(config_name='blog')
    slug = models.SlugField()
    categories = models.ManyToManyField(Category)
    featured = models.BooleanField(default=False)

我正在尝试检索与模板中单个帖子相关联的类别列表,以便我可以在帖子的底部显示这些类别标题。

以下是适当显示帖子但不显示类别的模板代码。

{% for post in blog_posts %}

            <div class="post">
                <div class="date">
                    {{post.published_date|date:"M"}}
                    <span class="day">{{post.published_date|date:"d"}}</span>
                    <span>{{post.published_date|date:"Y"}}</span>
                </div>
                    <div class="entry">
                        <div class="page-header">
                            <h2 class="post-title"><a href="{% url blog_post post.id post.slug %}">{{post.title}}</a></h2>
                        </div>
                        <blockquote>
                            <p><strong>{{post.subtitle}}</strong></p>
                        </blockquote>
                        <p>{{post.body|safe}}</p>
                        <div class="well well-small">
                          <i class="icon-th-list "></i> Categories:LIST CATEGORIES HERE 
                        </div>
                    </div> <!--entry div-->
            </div><!--post div-->
{% endfor %}

有没有人想过如何检索特定帖子的类别?我非常感谢时间和专业知识。

1 个答案:

答案 0 :(得分:4)

您可以使用此

访问类别
{% for category in post.categories.all %}
    {{ category.title }}
{% endfor %}

我还建议在视图中向查询集添加.prefetch_related('categories')以减少sql查询的数量。