İçereği Atla
Menü
Bu soru işaretlendi
1 Cevapla
2815 Görünümler

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
Vazgeç
En İyi Yanıt

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
Vazgeç
Üretici

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

İlgili Gönderiler Cevaplar Görünümler Aktivite
1
Eyl 25
1982
1
Haz 25
2010
3
Tem 25
3587
1
May 25
1715
4
May 25
3059