Czy istnieje sposób na dodanie niestandardowego atrybutu pola w Odoo? Na przykład każde pole ma atrybut help
, w którym można wprowadzić komunikat wyjaśniający pole dla użytkownika. Dlatego chcę dodać atrybut niestandardowy, aby zmienić sposób działania pola dla wszystkich typów pól.Odoo - dodaj niestandardowy atrybut pola?
Chcę dodać do klasy Field
, aby wszystkie pola otrzymały ten atrybut. Ale wydaje się, że nie ważne, co robię, Odoo nie widzi, że taki atrybut został dodany.
Gdybym po prostu dodać nowy atrybut niestandardowy lubię:
some_field = fields.Char(custom_att="hello")
Wtedy to jest po prostu ignorowana. I muszę go odebrać metodą fields_get
, która może powrócić żądaną wartość atrybutu (info co robi:
def fields_get(self, cr, user, allfields=None, context=None, write_access=True, attributes=None):
""" fields_get([fields][, attributes])
Return the definition of each field.
The returned value is a dictionary (indiced by field name) of
dictionaries. The _inherits'd fields are included. The string, help,
and selection (if present) attributes are translated.
:param allfields: list of fields to document, all if empty or not provided
:param attributes: list of description attributes to return for each field, all if empty or not provided
"""
więc nazywając ją, nie powraca mój atrybut niestandardowy (to nie zwraca te pierwotnie zdefiniowane przez Odoo chociaż).
próbowałem też aktualizowanie _slots
(z małpiej poprawki lub po prostu testuje zmieniając kod) atrybut źródłowy w Field
klasy, ale wydaje się, że to za mało. Ponieważ mój atrybut jest nadal ignorowane.
from openerp import fields
original_slots = fields.Field._slots
_slots = original_slots
_slots['custom_att'] = None
fields.Field._slots = _slots
Czy ktoś wie, jak poprawnie dodać nowy atrybut niestandardowy dla pola?
Próbowałem to i to działa, choć trzeba również dodać, że atrybut wewnątrz '_slots' słowniku (w klasie' Field'), więc będzie uzyskać wartość domyślną, inaczej Odoo zgłosi błąd. Teraz muszę dowiedzieć się, jak zastosować to bez bezpośredniego modyfikowania kodu źródłowego. – Andrius