获取Django中ManyToManyField的总价

时间:2013-08-08 13:22:33

标签: python django

我正在努力获得ManyToManyField的总价。我在price_for_each_item上得到每个单独的价格,然后我想要将总数增加到'total_price'

class PurchaseOrder(models.Model):
    number_of_products = models.ManyToManyField('Product', null =True)
    total_price = models.FloatField(verbose_name='Total Price')

class Product(models.Model):
    products = models.CharField(max_length=256, null =True)
    price_for_each_item = models.FloatField(verbose_name = "Price")

    def __unicode__(self):
        return self.products

例如,如果我订购Macbook Pro = 500美元,华硕电脑= 200美元,鼠标垫= 50美元。我希望总数达到total_price = $ 750

编辑:我试过这样做,但无济于事。任何人都知道我必须做些什么才能解决这个问题?当我尝试显示它时,它说没有浮动对象可调用

    def get_total_price(self):
       return ([p.price_for_each_item for p in self.total_price()])

2 个答案:

答案 0 :(得分:1)

无需添加dollar_amount字段,即重复信息。取而代之的是财产,这就是你获得总价的方式:

from django.db.models import Sum

p = PurchaseOrder.objects.filter(...)
p.annotate(Sum("products__price_for_each_item")

答案 1 :(得分:1)

从上方移动。

如果我理解正确,你可以从对象本身中检索总和。因此,如果您有一个名为“订单”的订单,其中已经分配了产品(在保存过程中,您应该可以执行以下操作:

order.total_price = order.number_of_products.all().aggregate(Sum('price_for_each_item')). 

如果这回答了您的问题,请告诉我,我会将其移至答案。

很高兴我可以帮忙。在这里不要成为纳粹分子,请在将来更多地考虑你的模型领域名称,它们会让人非常困惑。

编辑您的评论:

我不确定,但我认为重写模型的保存方法是让它在管理中工作的方法:

def save(self):
        super(Person, self).save()
        self.total_price = self.number_of_products.all().aggregate(Sum('price_for_each_item')). 
        self.save(commit=True)

尽管没有测试过这个。看看这个: http://ifacethoughts.net/2009/07/14/calculated-fields-in-django/ 如果它有效,你能否接受答案。