Фильтровать product_set в django-mptt

Есть 2 модели

class Category(MPTTModel):
    title = models.CharField()
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)

class Product(models.Model):
    category = models.ForeignKey(Category, blank=True, null=True)

Я хочу получить дерево от обеих моделей. Теперь я могу получить:

в просмотрах

nodes = Category.objects.all()

в шаблоне

{% for n in nodes %}
  {% for t in n.product_set.all %}

Но я хочу получить

nodes = Category.objects.all().**insert_to_category_product_with_filter**(id__in=[list_id])

person kisean    schedule 09.01.2018    source источник


Ответы (1)


Я нашел только одно решение через template_tag

@register.filter()
def filter_GET(node, GET):
    qs = node.product_set.all().prefetch_related('product_set')

    product = GET.get('product', None)
    if product:
        qs = qs.filter(product_id=product)

    any_more = GET.get('any_more', None)

    return qs

в шаблоне

{% for n in node|filter_GET:request.GET %}
person kisean    schedule 13.01.2018