python - 当我使用其他模型的字段时,如何使用 "store=True"计算字段?

标签 python python-2.7 odoo-8 odoo odoo-10

我在联系人 TreeView 中有 pos_order_total 字段。如果 store=False,它会被完美计算,但如果 store=True,如果我下了一些 POS 订单,它就不会被计算。那么我怎样才能使它与 store=True

一起工作
from odoo import api, fields, models

class ResPartner(models.Model):
    _inherit = 'res.partner'

    pos_order_total = fields.Monetary(
        string='POS Order Total',
        compute='_compute_pos_order_total',
        store=True)

    def _compute_pos_order_total(self):
        Order = self.env['pos.order']
        for partner in self:
            total = 0.0
            domain = [('partner_id', '=', partner.id)]
            for o in Order.search(domain):
                total += o.amount_total
            partner.pos_order_total = total

最佳答案

理论

查看 computed fields 的 Odoo 文档

total = fields.Float(compute='_compute_total')

@api.multi
@api.depends('value', 'tax')
def _compute_total(self):
    for record in self:
        record.total = record.value + record.value * record.tax

如您所见,您需要添加依赖项来触发计算方法并更新值。在这种情况下,字段 valuetax 位于同一模型中。因此,如果您使用来自同一模型或与该模型相关的字段,则 store=True 会很好地工作。因此,如果可能,您应该通过关系连接字段。

解决方案

在您的情况下,您需要创建一个 one2many 字段来关联表。检查以下代码是否适合您:

class ResPartner(models.Model):
    _inherit = 'res.partner'

    pos_order_total = fields.Float(
        string='POS Order Total',
        compute='_compute_pos_order_total',
        store=True
    )

    pos_order_ids = fields.One2many(
        string=u'POS Orders',
        comodel_name='pos.order',
        inverse_name='partner_id',
    )

    @api.multi
    @api.depends('pos_order_ids.amount_total')
    def _compute_pos_order_total(self):
        for partner in self:
            total = 0.0
            for order in partner.pos_order_ids:
                total += order.amount_total
            partner.pos_order_total = total

关于python - 当我使用其他模型的字段时,如何使用 "store=True"计算字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50002449/

相关文章:

python - 奥杜 : Acces a column from many2one

python mysql连接错误时自动连接

python - 存在重复时替换单个字符

python - Scrapy Spider 关闭后如何获取 `item_scraped_count` - Python27

python - array.array() 可以用来定义二维数组吗?

inheritance - 我们可以继承和更改odoo中的noupdate ="1"吗?

python - 当自定义命名空间为对象时,未设置默认 argparse 参数值

python - 使用 boto3 调整 EC2 实例的大小

python - 如何检查列表中的所有项目

html - 用新类覆盖 'btn-xs' 的 Bootstrap CSS