在pos.quotation模型中我们有状态。所以我的目标是当状态发生变化时我希望鞋子中的布尔字段命名为" hand"会变成真的。我知道如果我在一个模型中做这个怎么做,但是当我需要在其他模型中改变字段时我会挣扎。
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
答案 0 :(得分:1)
在onchange中,当您更改值时,self包含一个虚拟对象 数据库层没有任何反应。 (与计算领域相反)
但原始值在self._origin中传递。
@api.onchange('state')
def handed(self):
if self.state == "delivery_success":
# first try this if it work
self._origin.shoes.handed = True
# if not working then you need to fetch the recorod
# from the database first.
shoes = self.env['shoes.order'].search[('id', '=', self.shoes.id)]
shoes.handed = True
但是在onchange事件中执行此操作可能会导致用户拥有一些问题映像 改变主意,点击取消(更改被删除),但shoes.handed是 al ready已在数据库中提交。
我的道具是使用相关领域。
class pos_quotation(models.Model):
_inherit = "pos.quotation"
# i'm assuming that your m2o field is shoes
# don't make readonly because you need to save it's changed value
# when you hit save.
handed = fields.Boolean(related="shoes.handed")
@api.onchange('state')
def handed(self):
if self.state == "delivery_success":
self.handed = True
请勿忘记将此字段添加到表单视图中,并确保它不可见 所以用户不要手动更新值
<field name="handed" invisible="1"/>
希望你明白这一点。