Skip to Content
Menú
This question has been flagged
1 Respondre
3696 Vistes

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
Descartar
Autor 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
Descartar
Related Posts Respostes Vistes Activitat
2
d’abr. 22
6212
0
d’abr. 23
2851
1
de des. 21
4826
5
de juny 21
17620
1
de març 21
5625