DJANGO — вычисление цены и количества каждого элемента

#python #django

#python #django

Вопрос:

я хочу вычислить каждый товарный продукт, а не общее среднее значение, как мне вычислить каждую единицу товара, кратную его количеству?

Я просто хочу получить общую сумму каждого элемента, но как мне это сделать? что я должен использовать? агрегировать или аннотировать?

Я использую aggregate для получения общего количества всего продукта

 total = CustomerPurchaseOrderDetail.objects.filter(
            id__in=cart.values_list('id')
        ).aggregate(
            total=Sum(
                F('unitprice') * F('quantity'),
                output_field=FloatField(),
            )
        )['total']
        print('aggregate', total)
  

и это моя логика о том, как получить общее количество каждого продукта

 total_amount_of_product = CustomerPurchaseOrderDetail.objects.filter(
    id__in=cart.values_list('id')).annotate(total_per_item=Sum(F('unitprice') * F('quantity'),
                output_field=FloatField(),))
item_totals = [item.total_per_item for item in total_amount_of_product]
  

это результат в моем html

введите описание изображения здесь

вот как я печатаю в html

 <td class="cart__cell--total"><span class="cart__item-total">₱ {{item_totals}}</span></td>
  

это мой models.py

 class CustomerPurchaseOrderDetail(models.Model):

    profile = models.ForeignKey(Customer, 
                                on_delete=models.SET_NULL, null=True, blank=True,
                                verbose_name="Client Account")

    products = models.ForeignKey(Product, 
                                 on_delete=models.SET_NULL, null=True, blank=True,
                                 verbose_name="Product")
    quantity = models.IntegerField(null=True, blank=True, default=1)
    
    unitprice = models.FloatField(max_length=500, null=True, blank=True)

    amount = models.FloatField(max_length=500, null=True, blank=True)
  

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

1. Не показывайте, что вы сделали правильно… Покажите, с чем у вас возникли проблемы. Итак, покажите нам свой models.py класс, views.py из которого вы будете отображать шаблон и template

2. @BiploveLamichhane я опубликовал свой models.py

3. Под каждым продуктом вы подразумеваете каждый продукт . Верно?

4. точно, мистер @BiploveLamichhane

Ответ №1:

Вы можете добавить метод, models.py чтобы вернуть то, что вы хотите, например:

 class CustomerPurchaseOrderDetail(models.Model):
    profile = models.ForeignKey(Customer, on_delete=models.SET_NULL,null=True, blank=True,verbose_name="Client Account")
    products = models.ForeignKey(Product,on_delete=models.SET_NULL, null=True, blank=True,verbose_name="Product")
    quantity = models.IntegerField(null=True, blank=True, default=1)
    unitprice = models.FloatField(max_length=500, null=True, blank=True)
    amount = models.FloatField(max_length=500, null=True, blank=True)

    @property
    def totalAmountOfProduct(self):
        return self.unitprice * self.quantity
  

В вашем views.py:

 all_products = CustomerPurchaseOrderDetail.objects.all()
  

В вашем шаблоне:

 {% for item in all_products %}
    <td class="cart__cell--total"><span class="cart__item-total">₱ {{item.totalAmountOfProduct}}
{% endfor %}