Как написать queryset для получения данных из различных связанных моделей в Django?

Структура моих моделей:

PRODUCT_TYPE = (
    ('s', 'simple'),
    ('v', 'varaible')
)


class Products(models.Model):
    name = models.CharField(max_length=250,null=True, blank=True,)
    slug = models.SlugField(max_length=200, unique=True,null=True)
    product_type = models.CharField(choices=PRODUCT_TYPE, default='simple', max_length=50)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    is_published =models.BooleanField(default=False)
    

class ProductAttribute(models.Model):
    product = models.ForeignKey(Products,on_delete=models.CASCADE, related_name='attributes', default=None)
    attributes = models.ForeignKey(Attributes,on_delete=models.CASCADE, related_name='attributes', default=None)
    values = models.ForeignKey(AttributeTerms, on_delete=models.CASCADE, related_name='attributes', default=None)




class ProductVariant(models.Model):
    product = models.ForeignKey(Products,on_delete=models.CASCADE)
    variant = models.ForeignKey(ProductAttribute,on_delete=models.CASCADE, null = True, default=None)
    stock = models.IntegerField(default=None)
    stock_threshold = models.IntegerField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    sku = models.CharField(max_length= 250, default=None)
    sale_price = models.DecimalField(max_digits=10, decimal_places=2)
    sale_start_date=models.DateField(auto_now_add=False, auto_now=False)
    sale_end_date=models.DateField(auto_now_add=False, auto_now=False)
   

Чего я хочу достичь:

Если тип_продукта - varaibale и если продукт имеет более одной вариации, получите минимальную и максимальную цену и покажите в диапазоне (как показано на прикрепленном изображении0

).

Если у товара есть цена продажи, получить наименьшую цену продажи и получить обычную цену того же варианта, имеющего наименьшую цену продажи.

если тип товара простой, если sale_price не none, показать обычную цену и sale_price иначе показать обычную цену

если у товара есть цена_продажи и если дата начала продажи меньше сегодняшнего дня, и если дата окончания распродажи больше или равна сегодняшнему дню, получить sale_end_date

И покажите в шаблоне в формате, как показано на изображении. enter image description here

Любая помощь будет высоко оценена.

Спасибо

Вернуться на верх