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

Posted

技术标签:

【中文标题】Django模板:从模型查询集对象中提取字段【英文标题】:Django template: Extract field from model queryset object 【发布时间】:2016-12-18 13:25:30 【问题描述】:

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

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

其中blogBlog 模型的一个实例,commentsrelated_nameForeignKeyComment 模型。

这相当于

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 

我得到一个:

无法解析余数:'.text' TemplateSyntaxError

【问题讨论】:

【参考方案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 

【讨论】:

您确定第一个 (with) 不应该是 % % @Jedi 已编辑。谢谢!【参考方案2】:

一种方法是使用“with”:

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

【讨论】:

以上是关于Django模板:从模型查询集对象中提取字段的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Django 查询中提取字段名和值

django 模板从查询集更改了日期格式

有没有办法将 Django 模型查询集转换为模板中的 json 或 json 字符串?

如何获取与传递给 Django 模板的查询集相关的查询集对象

模型字段类型从 CharField 更改为 ForeignKey 时 Django 模板损坏

从 Django 模板中的特定相关对象查询数据