繁体   English   中英

Search_field在Django中的定义

[英]Search_field for a definition in Django

在models.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上的返回值?

您应该重写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)

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

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

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

另外,尽管该项目是一个很早的版本,但它似乎也满足了类似的要求。

注意 :不要在查询集中调用sum 你应该用

from django.db.models import Sum

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

直接从BD获得价值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM