Теория
Взгляните на документацию 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