1

我正在尝试获取 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()])
4

2 回答 2

1

无需添加dollar_amount字段,即重复信息。而是让它成为一个属性,这就是你获得总价格的方式:

from django.db.models import Sum

p = PurchaseOrder.objects.filter(...)
p.annotate(Sum("products__price_for_each_item")
于 2013-08-08T13:47:18.400 回答
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/ 如果它有效,你能接受答案吗?

于 2013-08-08T14:53:28.593 回答