我有一个 Category
模型,我使用django-mptt具有子类别(以及子访问等)。我也有分配给类别的产品。
我想查询所有具有至少一个子类别和至少一个产品的根类别的数据库。例如,考虑此数据结构:
Category: Dairy (0 subcategories, 1 product)
Product: Milk
Category: Fruit (1 subcategory, 0 products)
Subcategory: Red (0 subcategories, 0 products)
Category: Vegetables (1 subcategory, 0 products)
Subcategory: Green (0 subcategories, 1 product)
Product: Cucumber
Category: Junk Food (1 subcategory, 1 product)
Product: Doritos
Subcategory: Chocolate (0 subcategories, 1 product)
Product: Snickers
在这种情况下,我希望查询仅返回"垃圾食品"类别,因为它是唯一符合所有三个标准的疑问(根类别,至少具有一个子类别,至少具有一个产品)。
我浏览了django-mptt文档,但没有看到这样做的方法。也许我忽略了它。有任何建议吗?
您可以在子类别和产品的类别上的许多字段中过滤。所以也许是类似的东西:
Category.objects.filter(
parent=None, # must be root category
children__in=Category.objects.filter(level=1), # must have at least one sub-category
products__in=Product.objects.all() # must have at least one product
).distinct()
或
Category.objects.filter(
parent=None, # must be root category
children__isnull=False, # must have at least one sub-category
products__isnull=False # must have at least one product
).distinct()