迭代一定数量的外键对象

时间:2016-03-17 06:31:00

标签: python django django-templates foreign-keys

我有一个模型Comments,其中包含另一个模型BaseRecipe的外键。我有一个DetailView调用BaseRecipe。我正在执行以下操作以显示BaseRecipe的所有注释:

    {% for comment in object.comment_link.all %}

    <h5>Comment {{ forloop.counter }}</h5>
    <p>{{ comment.comment_text }}</p>
    <p>{{ comment.pub_date |date }}</p>

{%endfor %}

这很有效。但是,我想更改它,以便它只显示最后x个注释。我试过了:

{% for comment in object.comment_link.all{[:5] %}

&安培;

{% for comment[:5] in object.comment_link.all %}

我尝试了一些不同的逻辑,但它不允许我为循环设置初始值(不确定你是否可以在模板中执行此操作)。我想也许我应该在视图中创建一个变量,该变量是最后x个注释的列表?似乎应该有一些简单的操作员来做这件事,我没有偶然发现。

2 个答案:

答案 0 :(得分:1)

您可以使用slice

{% for comment in object.comment_link.all|slice:":10" %}

答案 1 :(得分:0)

我不认为这在模板中是可行的。因为您不仅需要5条评论,而且还想订购它们(最新5条)。您可以在BaseRecipe模型类中添加方法以获取最近的评论。

class BaseRecipe(models.Model):
    def get_recent_comments(self, n=5):
        return self.comment_link.all().order_by('-id')[:n]

然后在模板中调用此方法

{% for comment in object.get_recent_comments %}