Hi,
Ensure that:
-
user_id in mymodel.history is defined as a Many2one field linking to res.users .
-
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
What's your view then?