我有两个模型:Offer and Items
。我的报价始终具有可变数量的项目,这些项目具有价格。现在,我想显示每个优惠的商品总价。
我该怎么做?
这些是我的模特:
class Offer(models.Model):
name = models.CharField(default="", verbose_name='Offername', blank=False, max_length=255)
date = models.DateTimeField(default=django_now, verbose_name='Date')
number = models.TextField(default="", verbose_name='Offernumber', blank=True)
class Item(models.Model):
number = models.CharField('Nr.', blank=False, default="", max_length=10)
description = models.TextField(default="", blank=False, verbose_name='Beschreibung')
costs = models.DecimalField('Price', blank=False, default=0, decimal_places=2, max_digits=10)
offer = models.ForeignKey('Offer', null=True, verbose_name="Angebot", related_name="items", on_delete=models.CASCADE)
我想做的是显示属于一个要约的所有ITEMS的总和。假设我有2个要约,每个要约都有一个DetailView,在这个DetailView中,我显示每个要约的商品。优惠1有3个项目,优惠2有9个项目。现在,我要为要约1显示3个项目的总和,并为要约2显示其9个项目的总和,依此类推。
修改:我的视图
class OfferDetailView(DetailView):
model = Offer
template_name = 'offers/offer_detail.html'
context_object_name = 'offer'
答案 0 :(得分:1)
编辑
为此,您将必须覆盖DetailView
行为:
class OfferDetailView(DetailView):
model = Offer
template_name = 'offers/offer_detail.html'
context_object_name = 'offer'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
offer = self.object
total_item_cost = sum([i.cost for i in offer.item])
context['total_item_cost'] = total_item_cost
return context
,并在模板中:{{ total_item_cost }}
(请参阅this part of the doc)
初始答案
我认为最简单的方法是使用django annotation在数据库级别执行求和。另请参见this。
类似的方法可能有效(未经测试):
from django.db.models import Sum
offers = Offer.objects.all().annotate(total_costs=Sum("item__costs"))
在模板中,您现在可以使用:
{% for offer in offers %}
{{ offer.total_costs }}
{% endfor %}
答案 1 :(得分:0)
我想您可以执行类似的操作以解决您的情况。
from django.db.models import Sum
def get_total_item_offer(self):
total_items = Offer.objects.all()
return self.get_total_item.total_items.all().aggregate(sum=Sum('total')['sum']
答案 2 :(得分:0)
Django注释将起作用。在您的报价模型中添加
def get_total_price(self):
return self.objects.annotate(total_price_sum=Sum("item__costs"))
每个报价模型现在都有一个名为total_price_sum的字段,其中包含与之关联的每个模型的总价格