Skip to Content
Menu
You need to be registered to interact with the community.
This question has been flagged
2 Odgovori
10325 Prikazi

Hi, I'm using Odoo 11, I would like to know if I'm doing the creation and manipulation of records on cache correctly.

This is a simplified version of my issue:

class model_A(model.Model):
    model_A_some_field = fields.Char()
    model_B_ids = fields.One2many('model_B', 'model_A_id')
class model_B(model.Model):
    model_A_id = fields.Many2one('model_A')
    model_B_some_field = fields.Char()

I need to create, during edition of the form of model_A, a model_B record. I achieved this using an onchange method and 'new' on the model_A class:

@api.onchange('model_A_some_field')
def _onchange_create_record(self):
    self.env['model_B'].new({
        model_A_id = self.id,
        model_B_some_field = 'text'
    })

The problem I'm having is that the model_B record gets created but the fields it has don't appear initialized. I randomly discovered that they get initialized only if they are present as columns on the list view of model_B_ids of the model_A form. Is this the only way to make the cache aware of the records created with new or am I missing something?

Avatar
Opusti
Best Answer

class model_A(model.Model):

@api.onchange('model_A_some_field')

def _onchange_create_record(self):
    self.env['model_B'].create({
        model_A_id = self.id,
        model_B_some_field = 'text'
    })

Try it


Avatar
Opusti
Avtor Best Answer

Sorry, Kevin, I don't have enough karma to comment on your answer so I'm writing here, I hope you get a notification.

The problem of doing a 'create' during edition is that, if you discard the changes, the created records would stay because they are persisted in the database. By using 'new' they are only stored in cache and saved when the form is saved and discarded otherwise.

Avatar
Opusti
Related Posts Odgovori Prikazi Aktivnost
2
jul. 22
9206
1
jun. 21
2488
2
feb. 21
299
5
sep. 20
14369
4
jun. 20
49762