如何加入相关对象并在模板中渲染它们?

Posted

技术标签:

【中文标题】如何加入相关对象并在模板中渲染它们?【英文标题】:How to join related objects and render them in template? 【发布时间】:2017-05-21 18:12:12 【问题描述】:

我有两个相关的模型:

class Poll(models.Model):
    creator = models.ForeignKey(User, blank=True, null=True)
    title = models.CharField(max_length=300)
    pub_date = models.DateTimeField('date published')
    published = models.BooleanField(default=True)


class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=300)
    votes = models.IntegerField(default=0)

我的问题是如何在模板中列出所有民意调查及其各自的选择。

我现在的 ORM 查询是:

polls = Choice.objects.select_related('poll') 

在模板中:

% for p in polls %

 <li>p.choice_text</li> 

% endfor %

但是这个解决方案只列出了选项。我想要的是呈现与每个民意调查相关的选择。我怎样才能做到这一点?

【问题讨论】:

请注意,select_related('poll') on Choice 不会返回 polls,它只是在一个底层 sql 查询中获取所有 poll 信息。详情查看 django 文档:docs.djangoproject.com/en/1.10/ref/models/querysets/… 【参考方案1】:

查询集:

polls = Polls.objects.all() # Give you all polls

模板:

% for p in polls %
    <p>Poll : p.title </p>
    <ul>
    % for choice in p.choice_set.all %
       <li> choice.choice_text </li>
    % endfor %
    </ul>
% endfor %

如果我理解您的问题,希望对您有所帮助

【讨论】:

太棒了!像往常一样,django 比我想象的要简单得多。只需要一点编辑。在模板中它应该是p.ttielchoice.choice_text 否则它只显示object 完成,这只是举例。你当然可以显示你想要的:) 我应该把查询集放在哪里? @Leila 在您的视图中,并在您的上下文中传递带有查询集结果的变量。像这样,您的结果将传递给您的模板。

以上是关于如何加入相关对象并在模板中渲染它们?的主要内容,如果未能解决你的问题,请参考以下文章

Django模板侧边栏不能正常渲染

如何获取相关项目的列表并在 Django 中应用模板过滤器

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

使用 Django 在模板中渲染 ForeignKey 对象

大开测试:性能—如何调整经常用到的相关协议脚本模板(连载4)

OpenGL 对象不显示,着色器相关