Фильтр отдельных объектов из 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()