'Django-mptt filter in template
I use django-filter for filter in my website. Django-filter works well for my field. But when I use categories which to build with django-mptt in my template does not display tree (or taxonomy-node). I don't understand how to make it. I tried to build it you can see my try in template.html. But I get an error. I will be happy of any advice.
template.html
<form method="get" class="d-flex flex-column">
{% for su,structure in filter.form.category|tree_info %}
{% if structure.new_level %}<ul>
<li>{% else %}</li>
<li>{% endif %}
{{ su }}
{% for level in structure.closed_levels %}</li>
</ul>{% endfor %}
{% endfor %}
<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
)
category = TreeManyToManyField("Category")
class Category(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
class ArticleListView(ListView):
model = Book
template_name = "template.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["filter"] = ArticleFilter(
self.request.GET, queryset=self.get_queryset()
)
return context
filters.py
class ArticleFilter(django_filters.FilterSet):
category = TreeNodeMultipleChoiceField
class Meta:
model = Article
fields = {"category"}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
