在 django-mptt 中过滤 product_set

Filter product_set in 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])

我通过 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 %}