Django rest Ecommerce категории и товарные предложения

Я пытаюсь реализовать предложения для категорий и продуктов в моем проекте и не могу прийти к решению. Например, если я даю предложение категории, то все продукты, цена которых указана в категории, должны получить это предложение, а для продуктов оно индивидуально.

class Category(models.Model):
    category_name = models.CharField(max_length=15, unique=True)
    slug = models.SlugField(max_length=100, unique=True)

    class Meta:
        verbose_name_plural = "Category"


class Products(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    product_name = models.CharField(max_length=50, unique=True)
    slug = models.SlugField(max_length=100, unique=True)
    description = models.TextField(max_length=500)
    price = models.IntegerField()
    images = models.ImageField(upload_to="photos/products")
    images_two = models.ImageField(upload_to="photos/products")
    images_three = models.ImageField(upload_to="photos/products")
    stock = models.IntegerField()
    is_available = models.BooleanField(default=True)
    created_date = models.DateTimeField(auto_now_add=True)
    modified_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "Products"

    def __str__(self):
        return self.product_name

class CategoryOffer(models.Model):
    category = models.OneToOneField(Category, on_delete=models.CASCADE, related_name='cat_offer')
    valid_from = models.DateTimeField()
    valid_to = models.DateTimeField()
    discount = models.IntegerField(
        validators=[MinValueValidator(1), MaxValueValidator(100)]
    )
    is_active = models.BooleanField(default=False)

    def __str__(self):
        return self.category.category_name

class ProductOffer(models.Model):
    product = models.OneToOneField(Products, on_delete=models.CASCADE, related_name='pro_offer')
    valid_from = models.DateTimeField()
    valid_to = models.DateTimeField()
    discount = models.IntegerField(
        validators=[MinValueValidator(1), MaxValueValidator(100)]
    )
    is_active = models.BooleanField(default=False)

    def __str__(self):
        return self.product.product_name



Выше приведены мои модели. Я не знаю, как реализовать, думал о многих способах, но они продолжают приводить к ошибкам.

Вы используете отдельные модели для categoryoffer и productoffer. Создайте модель предложения со следующим полем:

class Offer:
    name = models.CharField()
    valid_from = models.DateTimeField()
    valid_to = models.DateTimeField()
    discount = models.IntegerField(
    validators=[MinValueValidator(1), MaxValueValidator(100)]
    )
    is_active = models.BooleanField(default=False)

Теперь используйте внешний ключ в моделях категории и продукта. класс Product: offer = models.ForeignKey(Offer)

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