res.users and res.partners tables are two base tables of odoo. If you would like to inherit and extend them, remember, you can’t do it from the Odoo user view. The reason is, when you do an upgrade from the user view, it has to be something that works over base module, not base module itself. Hence, you will get a 500 error or internal server error when trying to upgrade the module.
We will make a simple module for res.users to extend the model to add a field called ‘access_token’ for each user, and generate a key automatically when a user is added.
I will only post the model file and the view file here. I expect you already know how to write an Odoo module.
This is my res_users.py file
from odoo import api, fields, models import string, random class res_users_ex(models.Model): _inherit = 'res.users' access_token = fields.Text(string='API Access Token', default=False) def create(self, vals): key = ''.join(random.choices(string.ascii_lowercase + string.digits, k = 48)) user_id = super(res_users_ex, self).create(vals) if key: user_id.access_token = key return user_id
Here is the xml view file:
<?xml version="1.0" encoding="UTF-8"?> <odoo> <record model="ir.ui.view" id="view_res_users_access_token"> <field name="name">res.users.add.access.token</field> <field name="model">res.users</field> <field name="inherit_id" ref="base.view_users_form"/> <field name="type">form</field> <field name="arch" type="xml"> <xpath expr="//notebook" position="inside"> <page string="API Details"> <group col="4"> <field name="access_token"/> </group> </page> </xpath> </field> </record> </odoo>
Now, after you have added this to a module, you can not simply upgrade this from App >> Module >> Upgrade. You need to upgrade this module via command line like the following:
First switch to your odoo user, in my case, it is ‘odoo’
su - odoo
Now, first stop your current odoo with the following:
service odoo14 stop
Once done, now you can upgrade the module with the following:
/usr/bin/scl enable rh-python36 -- /opt/odoo/odoo14-venv/bin/python3 /opt/odoo/odoo14/odoo-bin -d my_database-u res_users_access_token
The command above is explained like the following:
python3 odoo-bin -d your_databasename -u module_name
In my case, I use virtual environment and scl for python, hence the python3 source is like the following:
/usr/bin/scl enable rh-python36 -- /opt/odoo/odoo14-venv/bin/python3
The next one is the binary of odoo with it’s location, which should be odoo-bin. With the parameter -d, you give your database name, and with the parameter -u, you need to give your module name. After you run the command, you should see no ‘Error’ or Red marked line in your console. If not, it shall be upgraded. Now do control + c, and start your odoo again to see the new fields being visible in your Users tab.