在Django模板中对查询结果进行分组

时间:2019-02-12 22:25:54

标签: django django-templates

我正在尝试将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()尝试获得以下结果: Screenshot of intended output

父标签将是“主题”,并且在导航选项卡中,我希望具有共享该父标签的各种标签的复选框。

关于如何执行此操作的任何想法?

编辑: 我认为我误会了重组,因为我无法使其正常工作。这是我尝试过的:

{% 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>

1 个答案:

答案 0 :(得分:0)

您仍然没有显示将数据发送到模板的视图。 for循环看起来不错,但是regroup应该看起来像这样:

{% regroup form.tags by parent_tag as tags_list %}

要执行此操作,form.tags集合中的各个对象必须具有parent_tag属性或属性。

如注释中所述,form.tags中的对象必须已经按parent_tag进行排序才能正常工作,否则每个parent_tag将得到多个组。 / p>