Skip to Content
Menu
This question has been flagged
1 Odpoveď
470 Zobrazenia

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
Zrušiť

What's your view then?

Best Answer

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
Zrušiť
Autor

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

Related Posts Replies Zobrazenia Aktivita
3
jún 25
2401
4
júl 25
1148
1
nov 24
1557
0
okt 23
4488
0
júl 22
2871