【发布时间】:2010-10-22 15:45:43
【问题描述】:
我有以下型号:
class Tag(models.Model):
name = models.CharField(max_length=20)
class Entry(models.Model):
title = models.CharField(max_length=100)
date = models.DateField()
tags = models.ManyToManyField(Tag)
在视图中,我创建了一个 Entry 对象列表并希望在模板中显示元素:
{% for entry in entries %}
{{ entry.title }}
{{ entry.date }}
<!-- {% for tag in entry.tags %} {{ tag }} {% endfor %} -->
{% endfor %}
使用此模板代码,它会生成以下 TemplateSyntaxError 指向模板的第一行(用于标记):
渲染时捕获 TypeError:'ManyRelatedManager' 对象不可迭代
entrys 变量是一个列表:
entries = Entry.objects.filter(user=user_id)
entries = list(entries)
entries.sort(key=lambda x: x.id, reverse=False)
你知道这可能是什么问题以及如何解决这个问题吗?
我是 Django 新手,所以任何关于如何调试模板的建议都可能会有所帮助。
更新
即使使用此模板,我也会遇到同样的错误:
{% for entry in entries.all %}
<!-- everything is commented out here -->
{% endfor %}
【问题讨论】:
-
为什么要将“条目”转换为列表并在 Python 中对其进行排序?这是非常低效的。您应该使用 'order_by' 让数据库进行排序。