【发布时间】:2019-07-06 15:52:58
【问题描述】:
我正在尝试对 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 也许因为我无法让它作为一个常规列表工作。这是我尝试过的:
{% 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>
【问题讨论】:
-
regroup应该可以正常工作。请发布您尝试过的代码。关于regroup,要记住的一件事是它需要接收按您要分组的属性预先排序的数据(这里:parent_tag 的文本值),否则您会得到重复的父标签。 -
@EndreBoth 谢谢。你能告诉我上面的例子哪里出错了吗?