#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 %}