我有以下型号:
class Topic(models.Model):
title = models.CharField(max_length=140)
def __unicode__(self):
return self.title
class Meta:
verbose_name = _('topic')
verbose_name_plural = _('topics')
class TopicLabel(models.Model):
name = models.CharField(max_length=256)
order = models.IntegerField(null=True, blank=True)
def getTopics():
return TopicLabelConnection.objects.filter(labelId=self.id).orderby('order')
def __unicode__(self):
return self.name
class TopicLabelConnection(models.Model):
topicId = models.ForeignKey(Topic, related_name='connection_topic')
labelId = models.ForeignKey(TopicLabel, related_name='connection_label')
def __unicode__(self):
return self.labelId.name + ' / ' + self.topicId.title
有
- 话题,
- 主题标签和
- 它们之间的连接(TopicLabelConnection)。
一个标签可以分配给多个主题。
我想显示具有以下结构的有序列表:
- 标签 1
- 话题一
- 话题二
- 话题 3
- 标签 2
- 话题四
- 主题 5
- 话题 6
其中主题 1、2 和分配给标签 1,主题 4、5 和 6 - 分配给标签 2。
为此,我创建了如下所示的视图函数和 HTML 模板片段。
查看功能
def home(request):
labels = TopicLabel.objects.filter(connection_label__isnull=False).distinct().order_by('order')
return TemplateResponse(request, 'home.tpl.html', locals())
模板片段
<ol>
{% for cur_label in labels %}
<li>{{ cur_label.name }}</li>
<ol>
{% for cur_topic_label_connection in cur_label.getTopics %}
<li>{{ cur_topic_label_connection.topicId.title }}</li>
{% endfor %}
</ol>
{% endfor %}
</ol>
结果:只显示标签,而不显示它们的主题。
我应该如何更改代码以便标签和主题都显示在层次列表中?