Skip to Content
Menu
Dette spørgsmål er blevet anmeldt
1 Svar
488 Visninger

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
Kassér

What's your view then?

Bedste svar

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
Kassér
Forfatter

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

Related Posts Besvarelser Visninger Aktivitet
3
jun. 25
2408
4
jul. 25
1156
1
nov. 24
1559
0
okt. 23
4497
0
jul. 22
2876