1

在模型.py

class PurchaseOrder(models.Model):
    product = models.ManyToManyField('Product', null =True)
    total_price= models.FloatField()

    def get_total_price(self):
        return sum([p.price_for_each_item for p in self.product.all()]) #this just returns a float such as 42323

在 admin.py 中:

search_fields = ['total_price']将工作。但是,我无法搜索 get_total_price。那么我怎样才能做到这一点,以便搜索可以获取定义。或者我怎样才能使对象 total_price 获取并保存 get_total_price 的回报值?

4

2 回答 2

0

您应该覆盖该save()方法并在添加和更新时插入 total_price。它更容易,性能更好。

未测试:

class PurchaseOrder(models.Model):
    product = models.ManyToManyField('Product', null =True)
    total_price= models.FloatField()

    def save(self, *args, **kwargs):
        self.total_price = sum([p.price_for_each_item for p in self.product.all()])
        super(PurchaseOrder, self).save(*args, **kwargs)
于 2013-08-08T18:43:20.547 回答
0

我找到了你这个片段。它已经很老了,因此可能需要进行一些更改才能使其与最新的 django 版本一起使用。

您可以在右侧面板中查看使用说明。

请注意,它是为直接字段值实现的。您必须进行一些调整才能使其与总和一起使用。

此外,这个项目似乎涵盖了类似的要求,尽管它是一个非常早期的版本。

注意:不要sum使用查询集调用。你应该使用

from django.db.models import Sum

self.product.all().aggregate(Sum('price_for_each_item'))

直接从 BD 获取价值。

于 2013-08-08T19:46:18.907 回答