python - 当我使用来自其他模型的字段时,如何使用“store = True”使计算字段工作?
问题描述
我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
解决方案
理论
查看计算字段的 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
如您所见,您需要添加依赖项以触发计算方法并更新值。在这种情况下,字段value
和tax
在同一模型中。因此,如果您使用的是来自同一模型或与该模型相关的字段,那么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
推荐阅读
- javascript - msgwindow 文档中的 Javascript 断线写入
- javascript - 期望一个赋值或函数调用,而是看到一个表达式。在 document.execCommand("copy"); 对于书签
- javascript - Javascript没有从嵌套函数中创建闭包?
- ocaml - Ocaml税计算器隐藏错误
- javascript - 创建一个将用户输入传递给另一个表单的表单
- python - Python 文档和实现中“对象在内存中的地址”的细微差别
- python - 多个 Python 程序能否安全地同时打开一个 CSV 文件进行读取?
- python - 如何从 Ubuntu 18.04 中完全删除 Python 3.6
- sql - 自动生成架构
- html - 使用 XSLT 显示 XML 文件的内容