私は次のモデルを持っています:
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
がある
- トピック,
- TopicLabelsと
- それらの間の接続 ( TopicLabelConnection )。
1 つのラベルを複数のトピックに割り当てることができます。
次の構造の順序付きリストを表示したい:
- ラベル 1
- トピック 1
- トピック 2
- トピック 3
- ラベル 2
- トピック 4
- トピック 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>
結果: ラベルのみが表示され、トピックは表示されません。
ラベルとトピックの両方を階層リストに表示するには、コードをどのように変更すればよいですか?