Категория и подкатегория для django-filter

Я хочу построить фильтр для категории и подкатегории. Фильтр работает достаточно хорошо, но я не знаю, как создать левое пространство для дочерних элементов (подкатегорий). Также я не знаю, как создать фильтр по ссылке. Например, я нажимаю на категорию "Природа" и эта категория содержит различные подкатегории. Короче говоря, у меня два вопроса:

  1. How to build space for children (subcategory)?
  2. how to present categories and subcategories by link? I will be happy of any answer. My code which I tried to use Django-MPTT. But I have error when I use "tree info" and "recursetree" - "'BoundWidget' object has no attribute '_mptt_meta'"

template.html

<form method="get" class="d-flex flex-column">

{% for su,structure in filter.form.subject|tree_info %}
            {% if structure.new_level %}<ul>
               <li>{% else %}</li>
               <li>{% endif %}
                  {{ su }}
                  {% for level in structure.closed_levels %}</li>
            </ul>{% endfor %}
      {% endfor %} 

OR

                  {% recursetree filter.form.subject %}
                  <li>
                     {{ node }}
                     {% if not node.is_leaf_node %}
                     <ul class="children">
                        {{ children }}
                     </ul>
                     {% endif %}
                  </li>
                  {% endrecursetree %} 


      <button class="btn-primary mt-2" type="submit">Search</button>
      </form>

models.py

class Book(models.Model):
     title = models.CharField(max_length=255, db_index=True)
    author = models.ForeignKey(
        "users.CustomUser", on_delete=models.SET_NULL, null=True, db_index=True
    )
    subject = TreeManyToManyField("Subject")



class Subject(MPTTModel):

    name = models.CharField(
        max_length=100,
        unique=True,
        verbose_name=_("category name"),
        help_text=_("format: required, max-100"),
    )
    slug = models.SlugField(
        max_length=150,
        null=False,
        unique=False,
        blank=False,
        verbose_name=_("category safe URL"),
        help_text=_(
            "format: required, letters, numbers, underscore, or hyphens"),
    )
    parent = TreeForeignKey(
        "self",
        on_delete=models.PROTECT,
        related_name="children",
        null=True,
        blank=True,
        unique=False,
        verbose_name=_("parent of category"),
        help_text=_("format: not required"),
    )

    class MPTTMeta:
        order_insertion_by = ["name"]

    class Meta:
        verbose_name = _("article category")
        verbose_name_plural = _("article categories")

views.py

def ArticleListView(request):

    article = Article.objects.all()

    filter = ArticleFilter(request.GET, queryset=article)

    subjects = Subject.objects.all()



    form = PostSearchForm

    context = {"filter": filter, "article": article}
    return render(request, "articles/articles.html", context)

filters.py

class ArticleFilter(django_filters.FilterSet):
    subject = django_filters.ModelMultipleChoiceFilter(
        queryset=Subject.objects.all(), widget=forms.CheckboxSelectMultiple())
    class Meta:
        model = Article
        fields = {"subject"}
Вернуться на верх