Django Models для расчета скидки

Я делаю проект электронной коммерции как мой первый проект на django и у меня есть некоторые проблемы с тем, как рассчитать мою фактическую цену и цену со скидкой, если есть цена со скидкой, поэтому я хочу сделать следующее: если администратор добавляет скидку к продукту, я хочу добавить значение в поле внутри модели под названием цена со скидкой и в этой модели я хочу рассчитать, сколько процентов скидки ввел администратор и какая цена со скидкой будет после применения процента скидки

ps: Английский - мой второй язык, и мне жаль, если вы не смогли понять

tldr : Я хочу вычислить цену и процент скидки и сделать значение этого поля в другом поле в модели под названием цена скидки

вот мои модели для продукта и скидки (пожалуйста, укажите, как я должен улучшить и любые мои ошибки)

    from django_extensions.db.fields import AutoSlugField
from django.core.validators import MinValueValidator, MaxValueValidator
# Create your models here.
class Products(models.Model):
    product_name   = models.CharField(max_length=200, unique=True)
    slug           = AutoSlugField(populate_from=['product_name'], unique=True)
    description    = models.TextField(max_length=500, blank=True)
    price          = models.IntegerField(validators = [MinValueValidator(0)])
    discount_price = models.IntegerField(validators = [MinValueValidator(0)],null=True)
    image1         = models.ImageField(upload_to='photos/Products')
    image2         = models.ImageField(upload_to='photos/Products')
    image3         = models.ImageField(upload_to= 'photos/Products')
    image4         = models.ImageField(upload_to= 'photos/Products')
    stock          = models.IntegerField(validators=[MinValueValidator(0)])
    Is_available   = models.BooleanField(default=True)
    category       = models.ForeignKey(Category, on_delete=models.CASCADE)
    created_date   = models.DateTimeField(auto_now_add=True)
    modified_date  = models.DateTimeField(auto_now=True)
class Meta:
        verbose_name = 'products'
        verbose_name_plural = 'products'
def get_url(self):
return reverse('product_page',args=[self.category.slug, self.slug])
def __str__(self):
return self.product_name

class OfferProduct(models.Model):
    product = models.OneToOneField(Products, related_name='category_offers', on_delete=models.CASCADE)
    discount = models.IntegerField(validators=[MinValueValidator(0),MaxValueValidator(99)],null=True,default = 0)
    is_active = models.BooleanField(default =True)
class Meta:
        verbose_name = 'Offer Product'
        verbose_name_plural = 'Offer Products'
def __str__(self):
return self.product.product_name

пример : цена : 1000, скидка: 100, поэтому процент составляет 10%

вы можете добавить свойство в OfferProduct:

@property
   def discount_percentage(self):
       return (100 * discount)/product.price #add your logic

========= model.py =================

class ProductModel(models.Model):
    name= models.CharField(max_length=300)
    og_price = models.IntegerField()
    discount = models.IntegerField()
    discounted_price = models.IntegerField(null=True)
    sell_price = models.IntegerField(null=True)
    
    created_at = models.DateField(auto_now_add=True)

    @property
    def discounted_price(self):
        return ((self.og_price)*(self.discount))/100

    @property
    def sell_price(self):
        return (self.og_price)-(self.discounted_price)

=========== Выход ============

enter image description here

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