Ir al contenido
Menú
Se marcó esta pregunta
1 Responder
474 Vistas

Hello,

I'm working on a custom model mymodel that logs user actions in a related model mymodel.history. The user_id is set using self.env.uid (same rec.env.user.id). The issue is not the saved value the correct user ID is stored in the database but in the UI (form or tree view), the user is always shown as OdooBot.


def _create_history_record(self, old_state, new_state):

    for rec in self:

        self.env["mymodel.history"].create({

            "user_id": self.env.uid,

            "mymodel_id": rec.id,

            "old_state": old_state,

            "new_state": new_state,

        })


Avatar
Descartar

What's your view then?

Mejor respuesta

Hi,

Ensure that:

  1. user_id in mymodel.history is defined as a Many2one field linking to res.users .
  2. The field is displayed in views (form/tree) with the correct relation and context.


Model Definition:

from odoo import models, fields class MyModelHistory (models.Model): _name = 'mymodel.history' _description = 'My Model History' user_id = fields.Many2one( 'res.users' , string = 'User' , default= lambda self: self.env.uid ) mymodel_id = fields.Many2one( 'mymodel' , string= 'My Model' ) old_state = fields.Char( 'Old State' ) new_state = fields.Char( 'New State' )

View Definition Example (XML):

<record id = "view_mymodel_history_tree" model = "ir.ui.view" > <field name = "name" >mymodel.history.tree </field> <field name = "model" >mymodel.history </field> <field name = "arch" type = "xml"> <tree> <field name = "user_id"/> <field name = "mymodel_id"/> <field name = "old_state"/> <field name = "new_state"/> </tree> </field> </record>

Creating Records in Code:

What you have is fine, but for clarity, you can use:

def _create_history_record ( self, old_state, new_state ): for rec in self: self.env[ "mymodel.history" ].create({ "user_id" : self.env.uid, "mymodel_id" : rec. id , "old_state" : old_state, "new_state" : new_state, })

or even better (Odoo best practice):

def _create_history_record ( self, old_state, new_state ): for rec in self: self.env[ "mymodel.history" ].sudo().create({ "user_id" : self.env.user. id , "mymodel_id" : rec. id , "old_state" : old_state, "new_state" : new_state, })

i hope it is usefull

Avatar
Descartar
Autor

Great! The problem was that I had related my model to res.partner, which wasn't very logical.
Thank you !

Publicaciones relacionadas Respuestas Vistas Actividad
3
jun 25
2401
4
jul 25
1151
1
nov 24
1557
0
oct 23
4490
0
jul 22
2871