Получить значения одним запросом Django

У меня есть две таблицы со связью многие ко многим и рекурсивной связью в таблице категории. Я могу получать по категории и её подкатегорям все продукты.

Мои модели:

class ProductCategory(MPTTModel):
    """категории продуктов"""

    name = models.CharField(max_length=255) 
    parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

    class MPTTMeta:
        order_insertion_by = ['name']

    def __str__(self):
        return self.name


class Product(models.Model):
    """Продукты"""
 
    name = models.CharField(max_length=1024) 
    category = models.ManyToManyField(ProductCategory, related_name="category_related")

    def __str__(self):
        return self.name

Запрос, где получаю все товары относящиеся к конкретной категории и все товары относящиеся к дочерним категориям этой категории:

  queryset = Product.objects.filter(category__in=ProductCategory.objects.get(id=456).get_descendants(include_self=True))
    print(queryset.query)

Как мне сделать одним запросом вывод товаров одновременно несколько категорий? Я бы мог делать такой запрос для каждой необходимой категории, записывать в массив, удалять дубликаты и выдавать пользователю, но одновременно категорий может быть и 10 и 15. Не думаю что такой подход будет производительным, так как товаров может быть более 100 000 шт.

Я смог делать, то что мне нужно таким образом при помощи OR:

queryset = Product.objects.filter(category__in=ProductCategory.objects.get(id=456).get_descendants(include_self=True))\
|Product.objects.filter(category__in=ProductCategory.objects.get(id=454).get_descendants(include_self=True))       
print(queryset)

Но не уверен, что это один запрос.


Ответы (0 шт):