如何使用Django mptt获取节点的所有后代?

ar5n3qh5  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(130)

我想我的类别,以显示在该类别包括后代类别的所有项目,所以父类别包含子类别的所有项目。
我尝试将此方法添加到models.py中的Category类中

def get_all_products(self):
    # To display all items from all subcategories
    return Product.objects.filter(category__in=Category.objects.get_descendants(include_self=True))

字符串
并将其添加到我的template.html,但它不工作。我做错了什么?

<li>{{ product.product_name }}</li>
{% empty %}
     <li>No items</li>
{% endfor %}

lndjwyie

lndjwyie1#

我已经意识到我错在哪里了,正确的代码是:
第一个月
{% for product in product.get_all_products %} <li>{{ product.product_name }}</li> {% empty %} <li>No items</li> {% endfor %}

ukxgm1gy

ukxgm1gy2#

在视图函数中,我用途:

products = models.Product.objects.filter(category__in=category.get_descendants(include_self=True))

字符串

3b6akqbq

3b6akqbq3#

例如,您可以在views.py中使用get_descendants()获取某个类别的所有后代,如下所示。* 如果include_selfTrue,则QuerySet还将包括模型示例本身,我不建议使用当前未维护的Django mptt。插入,使用Django treebeard

# "views.py"

from django.http import HttpResponse
from .models import Category, Product

def test(request):
    categories = Category.objects.get(name="Food").get_descendants()
    print(categories) 
    # <TreeQuerySet [<Category: Meat>, <Category: Fish>]>

    categories = Category.objects.get(name="Food").get_descendants(include_self=True)
    print(categories) 
    # <TreeQuerySet [<Category: Food>, <Category: Meat>, <Category: Fish>]>

    products = Product.objects.filter(category__in=categories)
    print(products)
    # <QuerySet [<Product: Beef>, <Product: Pork>, <Product: Salmon>

    return HttpResponse("Test")

字符串

相关问题