Как отфильтровать товар по его атрибуту в Django - Django?

Я работаю над проектом Django Ecommerce, где продукт имеет несколько атрибутов, таких как размер, цвет (один продукт может иметь несколько атрибутов с различными размерами и цветом). Я пытаюсь фильтровать товары с помощью django_filters, но не могу фильтровать по атрибутам. Ниже приведены коды (модели) для справки. Прошу вас любезно рассмотреть и помочь.

Заранее спасибо.

Модель продукта:

class Product(models.Model):
variations = (
    ('None', 'None'),
    ('Size', 'Size'),
)
name = models.CharField(max_length=200, unique=True)
store = models.ManyToManyField(Store)
slug = models.SlugField(null=True, blank=True, unique=True, max_length=500)
sku = models.CharField(max_length=30, null=True)
tax = models.IntegerField(null=True, blank=True)
stock = models.CharField(max_length=10, null=True)
variations = models.CharField(choices=variations, max_length=20)
short_description = models.CharField(max_length=500, null=True)
details = RichTextUploadingField(null=True, blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
discounted_price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
image = models.ImageField(upload_to='product/images', default='product.png', null=True, 
blank=True)
image_one = models.ImageField(upload_to='product/images', null=True, blank=True)
image_two = models.ImageField(upload_to='product/images', null=True, blank=True)
image_three = models.ImageField(upload_to='product/images', null=True, blank=True)
image_four = models.ImageField(upload_to='product/images', null=True, blank=True)
image_five = models.ImageField(upload_to='product/images', null=True, blank=True)
tags = models.ManyToManyField(Tags)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True,
                             related_name='products')
status = models.CharField(max_length=20, choices=(('Active', 'Active'), ('Inactive', 
'Inactive')))
brand = models.ForeignKey(Brand, on_delete=models.PROTECT, blank=True, null=True)
offer = models.ForeignKey(Offer, on_delete=models.CASCADE, null=True,
                          blank=True)  # This is used only for filtration

Модель атрибутов продукта

class ProductAttribute(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
size = models.ForeignKey(Size, on_delete=models.CASCADE, null=True, blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2, validators= 
[MinValueValidator(1)])
discounted_price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
stock = models.CharField(max_length=10, null=True)

Стандартным подходом было бы определение атрибутов в модели "Product". Однако, если вы настаиваете на этом, код будет выглядеть следующим образом:

filtered_ProductAttributes=ProductAttribute.objects.filter(size="12")
products=[filtered_ProductAttribute.product for filtered_ProductAttribute in filtered_ProductAttributes]

Как видите, код выглядит очень неэффективным, поэтому, как было предложено в начале, поместите атрибуты в модель "Product", и у вас получится:

products=Product.objects.filter(size="12")
Вернуться на верх