Skip to Content
Menu
This question has been flagged
1 Reply
1815 Views

Hi, does anyone know if it's possible to extend a python field definition so that we can change the string attribute?

I don't want to redefine the entire field just as it appears in base odoo. I just want to change one attribute of the field. Something like:

book_value=fields.Monetary(string='Net Book Value')
Avatar
Discard
Best Answer

Hi Bill, if you need to extend the field to change only one attribute you can actually define the field again and only change that attribute, the ORM will keep every other attribute and change the one you re-defined. 


from odoo import models, fields

class AccountAsset(models.Model):

_name = 'account.asset'
_description = 'Asset/Revenue Recognition'
_inherit = ['mail.thread', 'mail.activity.mixin']

book_value = fields.Monetary(string='Book Value', readonly=True, compute='_compute_book_value', store=True)


-- Inheritance 1: Module 1 that depends on account_asset --

class AccountAsset(models.Model):
_inherit = 'account.asset'

book_value = fields.Monetary(string='Custom string 1')

-- Inheritance 2: Module 2 that depends on module 1 (or installed after) --

class AccountAsset(models.Model):
_inherit = 'account.asset'

book_value = fields.Monetary(string='Custom string 2')

Outcome string: "Custom string 2"

It takes the last attribute defined in the AccountAsset class. ORM will automatically keep following attributes attached to the field:

  • readonly=True, 
  • compute='_compute_book_value', 
  • store=True 

Note: other attributes might still change if they are re-defined by other modules, or they also might be shown differently in specific views, if there is some specific 'string' attribute at view-level (XML view definition).

Avatar
Discard
Author

I just tried this and it seems to work that I can just include the attributes that I'm changing. Thanks!

Related Posts Replies Views Activity
2
Dec 24
3113
1
Dec 24
343
4
Nov 24
1362
1
Sep 24
1132
1
Sep 24
1198