Как получить доступ к дочерним элементам модели в наборе запросов django
У меня есть модель для продуктов и модель для категорий: Каждый продукт может иметь несколько категорий, а каждая категория может иметь несколько подкатегорий. например:
категории:
-Digital devices:
-laptop
-smartphone
-PC
продукты:
Mylaptop1
-category=laptop
Myphone2
-category=smartphone
Я хочу фильтровать товары по родительской категории, например, когда пользователь заходит по адресу: mysite.com/products/digital-devices, я хочу показать Mylaptop1 и Myphone2. У меня нет проблем с фильтрацией подкатегорий, но как я могу фильтровать по родительской категории в наборе запросов.
models.py:
class Category(models.Model):
name=models.CharField(max_length=200, db_index=True),
slug=models.SlugField(max_length=200, unique=True, allow_unicode=True)
parent = models.ForeignKey('self', default=None, null=True, blank=True,
on_delete=models.SET_NULL,related_name="children")
class Product(models.Model):
name=models.CharField(max_length=200, db_index=True),
slug=models.SlugField(max_length=200, db_index=True, allow_unicode=True),
description=models.TextField(blank=True),
category = models.ManyToManyField(Category, related_name='products')
views.py
def product_list(request, category_slug=None):
category = None
categories = Category.objects.all()
products = Product.objects.filter(available=True)
photos = ProductImage.objects.all()
if category_slug:
category = get_object_or_404(Category,slug=category_slug)
products = products.filter(category=category) # query for sub categories
products = products.filter(category__in=[category.children.all]) # i tried to use this query set to get products using parent category but it does not work
Как я могу получить доступ к товарам, которые имеют дочерние категории, используя родительскую категорию
Вы можете фильтровать подкатегории через поле parent
parent_category = Category.objects.get(slug='DigitalDevices')
products = products.filter(
category__in=Category.objects.filter(parent=parent_category)
)