Как я могу показать реальную цену продукта, а также цену со скидкой

#django #django-models #django-views #django-templates

Вопрос:

Мой html :

 {% for stock in stocks %}
    <p> size : {{stock.size}}</p>
    {% for dis in discount %}
       price : {{stock.price}} and Discount Percent : {{dis.discount_percent}}%
    {% endfor %}
{% endfor %}
 

Я использовал первый цикл, потому что мой продукт может иметь два разных размера , а второй цикл просто потому, что я использовал objects.filter() , например price , 200 долларов и discount_percent 25 долларов, как я могу показать сниженную цену, которая стала 150 долларов ?

Модели:

 class Product(models.Model):
    product_model = models.CharField(max_length=255, default='')
...

class Stock(models.Model):
    ONE = '1'
    TWO = '2'
    FREE = 'free'
    PRODUCT_SIZES = [
        (ONE, '1'),
        (TWO, '2'),
        (FREE, 'free'),
    ]

    size = models.CharField(max_length=60,default=" ", choices=PRODUCT_SIZES)
    quantity = models.PositiveIntegerField(default=0)
    price = models.FloatField(default=0, null=True)
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="product")
    
class Discount(models.Model):
    name = models.CharField(max_length=255, default='')
    items = models.ManyToManyField(Product, blank=True) 
    discount_percent = models.IntegerField(default=0,
        validators=[
            MaxValueValidator(100),
            MinValueValidator(1),
        ]
    )
    def __str__(self):
        return self.name
 

Ответ №1:

вот пример,

рассмотрим эти модели:

 class Product(models.Model):
    title = models.CharField(max_length=100)
    price = models.FloatField()
    discount_percentage = models.FloatField(blank=True, null=True)
    description = models.TextField()
    image = models.ImageField()
    stock = models.IntegerField()

    def __str__(self):
        return self.title


class OrderItem(models.Model):
    item = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)

    def __str__(self):
        return f"order of {self.item.title}" 

    def get_total_item_price(self):
        """calculate price by quantity ,ex 4 phone of 100$ would be 400$ """
        return self.quantity * self.item.price

    def get_item_price_after_discount(self):
        """calculate price with discount ,ex 1 phone of 100$ with 25% would be 100*0.25 = 75$ """
        return self.item.price * self.item.discount_percentage

    def get_total_discount_item_price(self):
        """calculate price by quantity with discount ,ex 4 phone of 100$ with 25% would be 400*0.25 = 300$ """
        return self.quantity * self.get_item_price_after_discount()

    def get_difference_price_after_discount(self):
        """,ex 4 phone of 100$ with 25% would be (400$ - 400*0.25 = 100$) """
        return self.get_total_item_price() - self.get_total_discount_item_price()
 

Комментарии:

1. Могу я спросить, какая модель ? Я обновил свой вопрос! с моделями.

2. Или, может быть, у вас есть лучшее предложение о том, как определить скидку другими способами