コンテンツへスキップ
メニュー
この質問にフラグが付けられました
1 返信
3975 ビュー

I'm currently trying to have a field default to a computed value upon creation, but then remain unchanged after the record has been created. I've extended 2 models MrpWorkorder and MrpRouting to add some fields like so:


class MrpRouting(models.Model:
​_name = "mrp.workorder"
​_inherit = "mrp.workorder"

​planning_bucket = fields.Integer("Planning Bucket")

class MrpWorkorder(models.Model):
​_name = "mrp.workorder"
​_inherit = "mrp.workorder"

​planning_bucket = fields.Integer("Planning Bucket",
​default=lambda self: self.operation_id.planning_bucket​
​)

The ideal behavior im going for here, is that when a work order is created, it automatically sets the value of planning_bucket based on the planning_bucket on the associated operation. Then, once the work order is created, the value of planning_bucket should remain unchanged, meaning if i later change the planning_bucket on the operation, it wont change on the work order.

The above code is setting the planning_bucket to 0 on every work order, even if a planning_bucket value exists on the associated operation. I was able to get the values to set properly with the compute argument, but the issue i had with that was that any time the operation's planning bucket changed, the work order planning bucket also changed.


I'm running Odoo 15.0. Any help would be really appreciated!

アバター
破棄
著作者 最善の回答

I ended up getting the desired behavior using the create method. I call super() first to create the record and then set the value of planning_bucket after:

@api.model
def create(self, vals):
​res = super(MrpWorkorder, self).create(vals)
​res.planning_bucket = res.operation_id.planning_bucket
​return res


アバター
破棄
関連投稿 返信 ビュー 活動
2
4月 22
6390
0
4月 23
3001
1
12月 21
5022
5
6月 21
17928
1
3月 21
5791