Фильтр отдельных объектов из ManyToMany внутри ManyToMany

У меня есть следующие Модели в моем приложении Django DRF.

class FilterValue(models.Model):
  code = models.Charfield(…)

class ProductVariant(models.Model):
  filters = models.ManyToManyField("FilterValue", blank=True, …)

class Product(models.Model):
  variants = models.ManyToManyField("ProductVariant", blank=True, …)

  category = models.ForeignKey("Category", blank=True)

Я пытаюсь определить функцию на модели Category, которая будет возвращать все объекты FilterValue, прикрепленные ко всем ProductVariants всех Products, которые назначены в категории. Поскольку у меня будет много различных ProductVarints, я не могу обойтись вложенными циклами, так как это будет очень медленно.

У меня было несколько попыток решить ее.

Конечно, я могу получить все Products внутри Category, используя:

products = Product.objects.filter(category=self)

Но затем я застреваю на том, что мне фактически нужно фильтровать вложенный объект ManyToMany, поскольку мне нужны все ProductVariants всех продуктов в QuerySet, а затем - на другом уровне мне нужны все объекты ManyToMany FilterValue каждого ProductVariant.

Спасибо.

Вот документация о том, как запрашивать отношения "многие ко многим".

Попробуйте решить вашу проблему следующим образом:

filters = ProductVariant.product_set.filter(category=your_category).filters.all()
Вернуться на верх