Python 获取Django多个油田的总价

Python 获取Django多个油田的总价,python,django,Python,Django,我想知道很多地方的总价。我得到了每个商品的价格,然后我想把所有商品的价格加在“总价”中 class PurchaseOrder(models.Model): number_of_products = models.ManyToManyField('Product', null =True) total_price = models.FloatField(verbose_name='Total Price') class Product(models.Model): pr

我想知道很多地方的总价。我得到了每个商品的价格,然后我想把所有商品的价格加在“总价”中

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
例如,如果我订购了MacBookPro=$500,华硕电脑=$200,鼠标垫=$50。我想把总数计入总价=750美元

编辑:我试过这样做,但没有用。有人知道我该怎么做才能把它修好吗?当我试图显示它时,它说没有可调用的浮点对象

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

无需添加
美元金额
字段,即重复信息。取而代之的是将其作为一处房产,这是您获得总价的方式:

from django.db.models import Sum

p = PurchaseOrder.objects.filter(...)
p.annotate(Sum("products__price_for_each_item")
从上面移动

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

order.total_price = order.number_of_products.all().aggregate(Sum('price_for_each_item')). 
如果这回答了你的问题,请告诉我,我将把它转移到一个答案

很高兴我能帮上忙。不要在这里当纳粹分子,请以后多考虑一下你的模型字段名称,它们会让人很困惑

重新编辑您的评论:

我不确定,但我认为覆盖模型的save方法是让它在admin中工作的方法:

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)
但还没有测试过。请看一下:
如果有效,你能接受答案吗。

你确定你的模型结构有意义吗?如果一个产品由多个项目组成,你应该创建一个额外的模型“项目”,并在产品中有一个多对多字段引用它?或者如果一个产品确实只有一个价格,而不是为每个项目命名“价格”,你应该称之为“价格”。就目前的情况而言,它非常混乱。对不起,我需要改写这些模型。PurchaseOrder应该有“多少产品”的实例,然后产品应该是产品,每个产品都有价格。所以一个产品确实由几个项目组成?是的,先生。这是目前的屏幕截图。(仔细阅读。看起来订单有多个产品,但一个产品是否由多个项目组成(即是否应参考单独的“项目”模型).hmm,我还不太熟悉属性。我该如何在管理员的列表显示中显示它?或者我想是否有办法定义它,以便我可以轻松地将其放在列表显示中?我也在想同样的事情,但事实上,如果以后价格发生变化,您不希望订单上的金额发生变化。太棒了。如果我在django admin中列出此项之前,我是否会对其进行定义,然后在list_display中调用它?例如,这是否类似于def get_total price(self):order.total_price=order.number_of_products.all().aggregate(总和('price_for_each_item'))我尝试将def save函数放入PurchaseOrderAdmin类和/或PurchaseOrder类中,但两次都出现错误“PurchaseOrderAdmin.list_display[1],“get_total_price”不是可调用的或“PurchaseOrderAdmin”属性,也不是在模型“PurchaseOrder”中找到的。”很抱歉,我无法直接告诉你。你必须在那里做一些研究。看看我在答案中包含的链接。一切都很好。你会把定义放在哪里?它会在PurchaseOrder下的模型中吗?在PurchaseOrderAdmin下的admin.py下。正如我在回答中所写的,save方法在model类中。