Openerp 更改其他模型的字段值

Openerp 更改其他模型的字段值,openerp,odoo-8,odoo-9,Openerp,Odoo 8,Odoo 9,在pos.QUOTE模型中,我们有状态。所以我的目标是,当状态改变时,我希望shoes.order中的boolean字段名为“hand”将变为true。我知道若我在一个模型中这样做,那个么该怎么做,但当我需要改变另一个模型中的场时,我会挣扎 class pos_quotation(models.Model): _inherit = "pos.quotation" @api.onchange('state') def handed(self): shoes

在pos.QUOTE模型中,我们有状态。所以我的目标是,当状态改变时,我希望shoes.order中的boolean字段名为“hand”将变为true。我知道若我在一个模型中这样做,那个么该怎么做,但当我需要改变另一个模型中的场时,我会挣扎

class pos_quotation(models.Model):
    _inherit = "pos.quotation"

    @api.onchange('state')
    def handed(self):
        shoes = self.env['shoes.order']
        for rec in self:
            if self.state == "delivery_success":
                rec.shoes.handed = True

在onchange中,当您更改值时,self包含一个虚拟对象 数据库层上不会发生任何事情。(与计算字段相对)

但是原始值在self中传递

@api.onchange('state'))
def(自我):
如果self.state==“交付成功”:
#先试试这个,如果有用的话
self.\u origin.shoes.hand=True
#如果不工作,那么您需要取回记录杆
#首先从数据库开始。
shoes=self.env['shoes.order'].search[('id','=',self.shoes.id)]
是的
但是在onchange事件中执行此操作可能会导致用户遇到一些问题 改变了主意,点击取消(更改已讨论),但shoes.Hand是 al ready在数据库中提交

我的建议是使用相关领域

class pos\u报价单(models.Model):
_inherit=“pos.quote”
#我假设你的m2o领域是鞋子
#不要将其设置为只读,因为您需要保存它的更改值
#当你点击save时。
handed=fields.Boolean(related=“shoes.handled”)
@api.onchange('state'))
def(自我):
如果self.state==“交付成功”:
self.hand=True
不要忘记将此字段添加到表单视图中,并确保其不可见 因此,用户不会手动更新该值


希望你有这个想法