所以我有这个讲座课。现在,对于本课程,我有两个选择:“课程”和“研讨会”,我希望每次我向其中任何一个添加讲座时,模板将首先显示选择,然后是所有讲座。 示例:类将包含Lecture1,Lecture2,Lecture3等。 问题是,当我迭代时,每次选择显示,每次演讲,我希望每个选择只显示ONCE。
class Lecture(models.Model):
course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures')
lecture_category = models.IntegerField(choices=((0, "Classes "),
(1, "Seminars"),
))
lecture_title = models.CharField(max_length=100)
content = models.TextField()
link = models.URLField(blank=True)
file = models.FileField(upload_to='documents', blank=True)
def __str__(self):
return self.lecture_title
<ul>
{% for c in lectures %}
<b>{{ c.get_lecture_category_display }}</b>
<p>.......................</p>
<li>{{ c.lecture_title }}</li>
<li>{{ c.content }}</li>
{% if c.link %}
<li>{{ c.link }}</li>
{% if c.file %}
<li><a href='{{ MEDIA_URL }}{{ c.file.url }}'>download</a></li>
{% endif %}
{% endif %}
{% endfor %}
<hr/>
</ul>
答案 0 :(得分:3)
您可以使用名为regroup的模板标记。请参阅https://docs.djangoproject.com/en/2.0/ref/templates/builtins/
上的重新组合部分{% regroup lectures by lecture_category as category_list %}
<ul>
{% for category in category_list %}
<li>{{ category.grouper }}
<ul>
{% for c in category.list %}
<li>{{ c.lecture_title }}</li>
<li>{{ c.content }}</li>
...etc
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
编辑: 正如Daniel Rosemen指出的那样,您还必须按照要在视图中重新组合的字段对查询进行排序。在这种情况下,您必须通过lecture_category订购讲座。上述方法不起作用。