Django模板:从模型查询集对象中提取字段

时间:2016-08-11 17:23:02

标签: django django-templates django-queryset

在Django模板中,我使用以下方式获取最新评论:

{{ blog.comments.all|dictsort:"created_at"|last }}

其中blogBlog模型的实例,commentsrelated_name ForeignKey模型的Comment。< / p>

这相当于

blog.comments.all().order_by("created_at").last()

问题:如何在模板中获取评论的text字段?

在视图中,我可以使用以下方式执行此操作:

blog.comments.all().order_by("created_at").last().text

如果我尝试:

{{ blog.comments.all|dictsort:"created_at"|last.text }}

我得到了:

  

无法解析余数:&#39; .text&#39; TemplateSyntaxError

2 个答案:

答案 0 :(得分:1)

  • with代码:

    {% with newest_comment=blog.comments.all|dictsort:"created_at"|last %}
        {{ newest_comment.text }}
    {% endwith %}
    
  • cached_property装饰者:

    models.py

    from django.utils.functional import cached_property
    
    class Blog(models.Model):
        @cached_property
        def newest_comment(self):
            return self.comments.order_by('created_at').last()
    

    template.html

    {{ blog.newest_comment.text }}
    
  • 上下文:

    context['newest_comment'] = blog.comments.order_by('created_at').last()
    return render(request, template, context)
    
  • latest()方法:

    models.py

    class Comment(models.Model):
        class Meta:
            get_latest_by = 'created_at'
    

    template.html

    {{ blog.comments.latest.text }}
    

答案 1 :(得分:1)

一种方法是使用“with”:

{% with blog.comments.all|dictsort:"created_at"|last as lastcomment %}
  {{ lastcomment.text }}
{% endwith %}