Skip to Content
Menu
This question has been flagged
1 Reply
2887 Views

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!

Avatar
Discard
Author Best Answer

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


Avatar
Discard
Related Posts Replies Views Activity
2
Apr 22
5707
0
Apr 23
2260
1
Dec 21
4173
5
Jun 21
16823
1
Mar 21
5180