我正在尝试将Django模板中的一些查询结果分组。我尝试了regroup,但没有成功。
我有一个标签模型,其父标签如下所示,并且与我的Board模型相关,该模型也在下面:
class BoardTags(models.Model):
name = models.CharField(max_length=150, null=True)
description = models.TextField(default='', null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
parent_tag = models.ForeignKey('self', null=True, blank=True)
def __str__(self):
return self.name
class Board(models.Model):
title = models.CharField(max_length=100, unique=False, blank=False, verbose_name=('Board_Title'))
sub_title = models.CharField(max_length=100, blank=False)
board_description = models.TextField(max_length=300, blank=False)
tags = models.ManyToManyField(BoardTags, blank=True, related_name='board')
这是我用来创建木板的视图(应该在此处显示木板标签):
class CreateBoard(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
model = models.Board
template_name = 'board/board_form.html'
select_related = ("user")
form_class = BoardForm
我正在使用此小部件'tags':forms.CheckboxSelectMultiple()尝试获得以下结果:
父标签将是“主题”,并且在导航选项卡中,我希望具有共享该父标签的各种标签的复选框。
关于如何执行此操作的任何想法?
编辑: 我认为我误会了重组,因为我无法使其正常工作。这是我尝试过的:
{% regroup form.tags by form.parent_tag as tags_list %}
<ul>
{% for parent_tag in tags_list %}
<li>{{ parent_tag.grouper }}
<ul>
{% for tag in parent_tag.list %}
<li>{{ tag.name }}: {{ tag.description }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
答案 0 :(得分:0)
您仍然没有显示将数据发送到模板的视图。 for循环看起来不错,但是regroup
应该看起来像这样:
{% regroup form.tags by parent_tag as tags_list %}
要执行此操作,form.tags
集合中的各个对象必须具有parent_tag
属性或属性。
如注释中所述,form.tags
中的对象必须已经按parent_tag
进行排序才能正常工作,否则每个parent_tag
将得到多个组。 / p>