| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/server-tools |
| GIT | |
| GIT | https://github.com/OCA/server-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/server-tools/tree/15.0/base_custom_info |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Rad0van |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/server-tools |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:38 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base_setup - base - web |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
custom_info_category_form |
custom.info.category | form | New | |
custom_info_category_search |
custom.info.category | search | New | |
custom_info_category_tree |
custom.info.category | tree | New | |
custom_info_option_form |
custom.info.option | form | New | |
custom_info_option_form_full |
custom.info.option | field | Inherits custom_info_option_form | |
custom_info_option_search |
custom.info.option | search | New | |
custom_info_option_tree |
custom.info.option | tree | New | |
custom_info_option_tree_full |
custom.info.option | tree | Inherits custom_info_option_tree | |
custom_info_property_form |
custom.info.property | form | New | |
custom_info_property_form_full |
custom.info.property | field | Inherits custom_info_property_form | |
custom_info_property_search |
custom.info.property | search | New | |
custom_info_property_tree |
custom.info.property | tree | New | |
custom_info_property_tree_full |
custom.info.property | field | Inherits custom_info_property_tree | |
custom_info_template_form |
custom.info.template | form | New | |
custom_info_template_search |
custom.info.template | search | New | |
custom_info_template_tree |
custom.info.template | tree | New | |
custom_info_value_editable |
custom.info.value | custom_info | New | |
custom_info_value_form |
custom.info.value | form | New | |
custom_info_value_search |
custom.info.value | search | New | |
custom_info_value_tree |
custom.info.value | tree | New | |
custom_info_value_tree_editable |
custom.info.value | tree | Inherits custom_info_value_tree | |
res_config_settings_view_form |
Allow to enable custom information | res.config.settings | xpath | Inherits base_setup.res_config_settings_view_form |
view_partner_form |
res.partner | xpath | Inherits base.view_partner_form |
custom_info_ids
One2many → custom.info.value
auto_join=True
comodel_name='custom.info.value'
domain=<expr>
inverse_name='res_id'
string='Custom Properties'
custom_info_template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
domain=<expr>
string='Custom Information Template'
all_custom_info_templates(self)
get_custom_info_value(self, properties)
onchange(self, values, field_name, field_onchange)
unlink(self)
name
Char
index=True
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
help='Properties in this category.'
inverse_name='category_id'
string='Properties'
sequence
Integer
index=True
check_access_rule(self, operation)
name
Char
index=True
required=True
translate=True
property_ids
Many2many → custom.info.property
comodel_name='custom.info.property'
help='Properties where this option is enabled.'
string='Properties'
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
help='Additional template to be applied to the owner if this option is chosen.'
string='Additional template'
value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
help='Values that have set this option.'
inverse_name='value_id'
string='Values'
check_access_rule(self, operation)
category_id
Many2one → custom.info.category
comodel_name='custom.info.category'
string='Category'
category_sequence
Integer
readonly=True
related='category_id.sequence'
store=True
string='Category Sequence'
default_value
Char
help='Will be applied by default to all custom values of this property. This is a char field, so you have to enter some value that can be converted to the field type you choose.'
translate=True
field_type
Selection
compute='_compute_field_type'
selection=[('str', 'Text'), ('int', 'Whole number'), ('float', 'Decimal number'), ('bool', 'Yes/No'), ('date', 'Date'), ('id', 'Selection')]
store=True
info_value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
inverse_name='property_id'
string='Property Values'
maximum
Float
default=-1
help='For numeric fields, it means the maximum possible value; for text fields, it means the maximum possible length. If it is smaller than the minimum, then this check is skipped'
minimum
Float
help='For numeric fields, it means the minimum possible value; for text fields, it means the minimum possible length. If it is bigger than the maximum, then this check is skipped'
model
Char
related='template_id.model'
name
Char
required=True
translate=True
option_ids
Many2many → custom.info.option
comodel_name='custom.info.option'
help="When the field type is 'selection', choose the available options here."
string='Options'
required
Boolean
sequence
Integer
index=True
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
ondelete='cascade'
required=True
string='Template'
widget
Selection
default='char'
help='Type of information that can be stored in the property.'
required=True
selection=[('boolean', 'Boolean'), ('float', 'Decimal'), ('integer', 'Integer'), ('date', 'Date'), ('char', 'Single line text'), ('text', 'Multi line Text'), ('html', 'Complex text'), ('many2one', 'Choice')]
check_access_rule(self, operation)
model
Char
compute='_compute_model'
inverse='_inverse_model'
search='_search_model'
string='Model technical name'
model_id
Many2one → ir.model
auto_join=True
comodel_name='ir.model'
ondelete='cascade'
required=True
string='Model'
name
Char
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
inverse_name='template_id'
string='Properties'
check_access_rule(self, operation)
write(self, vals)
category_id
Many2one
related='property_id.category_id'
store=True
category_sequence
Integer
related='property_id.category_id.sequence'
store=True
string='Category Sequence'
field_name
Char
compute='_compute_field_name'
help='Technical name of the field where the value is stored.'
field_type
Selection
related='property_id.field_type'
model
Char
index=True
readonly=True
related='property_id.model'
store=True
name
Char
related='property_id.name'
owner_id
Reference
compute='_compute_owner_id'
help='Record that owns this custom value.'
inverse='_inverse_owner_id'
selection='_selection_owner_id'
string='Owner'
property_id
Many2one → custom.info.property
comodel_name='custom.info.property'
required=True
string='Property'
property_sequence
Integer
index=True
related='property_id.sequence'
store=True
required
Boolean
related='property_id.required'
res_id
Integer
index=True
required=True
string='Resource ID'
value
Char
compute='_compute_value'
help='Value, always converted to/from the typed field.'
inverse='_inverse_value'
search='_search_value'
value_bool
Boolean
index=True
string='Yes/No value'
value_date
Date
index=True
string='Date value'
value_float
Float
index=True
string='Decimal number value'
value_id
Many2one → custom.info.option
comodel_name='custom.info.option'
domain="[('property_ids', '=', property_id)]"
ondelete='cascade'
string='Selection value'
value_int
Integer
index=True
string='Whole number value'
value_str
Char
index=True
string='Text value'
translate=True
widget
Selection
readonly=True
related='property_id.widget'
check_access_rule(self, operation)
view_mode
Selection
ondelete={'custom_info': 'cascade'}
selection_add=[('custom_info', 'Custom Info')]
No public methods.
type
Selection
ondelete={'custom_info': 'cascade'}
selection_add=[('custom_info', 'Custom Info')]
No public methods.
group_custom_info_manager
Boolean
help='Allow all employees to manage custom information'
implied_group='base_custom_info.group_basic'
string='Manage custom information'
group_custom_info_partner
Boolean
help='Add a tab in the partners form to edit custom information'
implied_group='base_custom_info.group_partner'
string='Edit custom information in partners'
No public methods.
custom_info_ids
One2many
context={'default_model': _name}
custom_info_template_id
Many2one
context={'default_model': _name}
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/server-tools |
| GIT | |
| GIT | https://github.com/OCA/server-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/server-tools/tree/14.0/base_custom_info |
| VERSION | |
| VERSION | 1.0.3 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Enric Tobella, OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci, Kitti U, oca-git-bot, Henrik Norlin |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/server-tools |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:05 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base_setup - base - web |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
Backend Assets (used in backend interface) | ir.ui.view | qweb | Inherits web.assets_backend |
custom_info_category_form |
custom.info.category | form | New | |
custom_info_category_search |
custom.info.category | search | New | |
custom_info_category_tree |
custom.info.category | tree | New | |
custom_info_option_form |
custom.info.option | form | New | |
custom_info_option_form_full |
custom.info.option | field | Inherits custom_info_option_form | |
custom_info_option_search |
custom.info.option | search | New | |
custom_info_option_tree |
custom.info.option | tree | New | |
custom_info_option_tree_full |
custom.info.option | tree | Inherits custom_info_option_tree | |
custom_info_property_form |
custom.info.property | form | New | |
custom_info_property_form_full |
custom.info.property | field | Inherits custom_info_property_form | |
custom_info_property_search |
custom.info.property | search | New | |
custom_info_property_tree |
custom.info.property | tree | New | |
custom_info_property_tree_full |
custom.info.property | field | Inherits custom_info_property_tree | |
custom_info_template_form |
custom.info.template | form | New | |
custom_info_template_search |
custom.info.template | search | New | |
custom_info_template_tree |
custom.info.template | tree | New | |
custom_info_value_editable |
custom.info.value | custom_info | New | |
custom_info_value_form |
custom.info.value | form | New | |
custom_info_value_search |
custom.info.value | search | New | |
custom_info_value_tree |
custom.info.value | tree | New | |
custom_info_value_tree_editable |
custom.info.value | tree | Inherits custom_info_value_tree | |
res_config_settings_view_form |
Allow to enable custom information | res.config.settings | xpath | Inherits base_setup.res_config_settings_view_form |
view_partner_form |
res.partner | xpath | Inherits base.view_partner_form |
custom_info_ids
One2many → custom.info.value
auto_join=True
comodel_name='custom.info.value'
domain=<expr>
inverse_name='res_id'
string='Custom Properties'
custom_info_template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
domain=<expr>
string='Custom Information Template'
all_custom_info_templates(self)
get_custom_info(self, property=None, code=None, option_field='display_name')
get_custom_info_property_by_code(self, code)
get_custom_info_value(self, properties)
onchange(self, values, field_name, field_onchange)
unlink(self)
name
Char
index=True
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
help='Properties in this category.'
inverse_name='category_id'
string='Properties'
sequence
Integer
index=True
check_access_rule(self, operation)
code
Char
name
Char
index=True
required=True
translate=True
property_ids
Many2many → custom.info.property
comodel_name='custom.info.property'
help='Properties where this option is enabled.'
string='Properties'
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
help='Additional template to be applied to the owner if this option is chosen.'
string='Additional template'
value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
help='Values that have set this option.'
inverse_name='value_id'
string='Values'
check_access_rule(self, operation)
category_id
Many2one → custom.info.category
comodel_name='custom.info.category'
string='Category'
category_sequence
Integer
readonly=True
related='category_id.sequence'
store=True
string='Category Sequence'
code
Char
default_value
Char
help='Will be applied by default to all custom values of this property. This is a char field, so you have to enter some value that can be converted to the field type you choose.'
translate=True
field_type
Selection
compute='_compute_field_type'
selection=[('str', 'Text'), ('int', 'Whole number'), ('float', 'Decimal number'), ('bool', 'Yes/No'), ('date', 'Date'), ('id', 'Selection')]
store=True
info_value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
inverse_name='property_id'
string='Property Values'
maximum
Float
default=-1
help='For numeric fields, it means the maximum possible value; for text fields, it means the maximum possible length. If it is smaller than the minimum, then this check is skipped'
minimum
Float
help='For numeric fields, it means the minimum possible value; for text fields, it means the minimum possible length. If it is bigger than the maximum, then this check is skipped'
model
Char
related='template_id.model'
name
Char
required=True
translate=True
option_ids
Many2many → custom.info.option
comodel_name='custom.info.option'
help="When the field type is 'selection', choose the available options here."
string='Options'
required
Boolean
sequence
Integer
index=True
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
ondelete='cascade'
required=True
string='Template'
widget
Selection
default='char'
help='Type of information that can be stored in the property.'
required=True
selection=[('boolean', 'Boolean'), ('float', 'Decimal'), ('integer', 'Integer'), ('date', 'Date'), ('char', 'Single line text'), ('text', 'Multi line Text'), ('html', 'Complex text'), ('many2one', 'Choice')]
check_access_rule(self, operation)
model
Char
compute='_compute_model'
inverse='_inverse_model'
search='_search_model'
string='Model technical name'
model_id
Many2one → ir.model
auto_join=True
comodel_name='ir.model'
ondelete='cascade'
required=True
string='Model'
name
Char
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
inverse_name='template_id'
string='Properties'
check_access_rule(self, operation)
write(self, vals)
category_id
Many2one
related='property_id.category_id'
store=True
category_sequence
Integer
related='property_id.category_id.sequence'
store=True
string='Category Sequence'
code
Char
related='property_id.code'
field_name
Char
compute='_compute_field_name'
help='Technical name of the field where the value is stored.'
field_type
Selection
related='property_id.field_type'
model
Char
index=True
readonly=True
related='property_id.model'
store=True
name
Char
related='property_id.name'
owner_id
Reference
compute='_compute_owner_id'
help='Record that owns this custom value.'
inverse='_inverse_owner_id'
selection='_selection_owner_id'
string='Owner'
property_id
Many2one → custom.info.property
comodel_name='custom.info.property'
required=True
string='Property'
property_sequence
Integer
index=True
related='property_id.sequence'
store=True
required
Boolean
related='property_id.required'
res_id
Integer
index=True
required=True
string='Resource ID'
value
Char
compute='_compute_value'
help='Value, always converted to/from the typed field.'
inverse='_inverse_value'
search='_search_value'
value_bool
Boolean
index=True
string='Yes/No value'
value_date
Date
index=True
string='Date value'
value_float
Float
index=True
string='Decimal number value'
value_id
Many2one → custom.info.option
comodel_name='custom.info.option'
domain="[('property_ids', '=', property_id)]"
ondelete='cascade'
string='Selection value'
value_int
Integer
index=True
string='Whole number value'
value_str
Char
index=True
string='Text value'
translate=True
widget
Selection
readonly=True
related='property_id.widget'
check_access_rule(self, operation)
view_mode
Selection
ondelete={'custom_info': 'cascade'}
selection_add=[('custom_info', 'Custom Info')]
No public methods.
type
Selection
ondelete={'custom_info': 'cascade'}
selection_add=[('custom_info', 'Custom Info')]
No public methods.
group_custom_info_manager
Boolean
help='Allow all employees to manage custom information'
implied_group='base_custom_info.group_basic'
string='Manage custom information'
group_custom_info_partner
Boolean
help='Add a tab in the partners form to edit custom information'
implied_group='base_custom_info.group_partner'
string='Edit custom information in partners'
No public methods.
custom_info_ids
One2many
context={'default_model': _name}
custom_info_template_id
Many2one
context={'default_model': _name}
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/server-tools |
| GIT | |
| GIT | https://github.com/OCA/server-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/server-tools/tree/13.0/base_custom_info |
| VERSION | |
| VERSION | 1.0.3 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Stefan Rijnhart, Enric Tobella, David Alonso, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Rad0van |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/server-tools |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:16 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base_setup - base - web |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
Backend Assets (used in backend interface) | ir.ui.view | qweb | Inherits web.assets_backend |
custom_info_category_form |
custom.info.category | form | New | |
custom_info_category_search |
custom.info.category | search | New | |
custom_info_category_tree |
custom.info.category | tree | New | |
custom_info_option_form |
custom.info.option | form | New | |
custom_info_option_form_full |
custom.info.option | field | Inherits custom_info_option_form | |
custom_info_option_search |
custom.info.option | search | New | |
custom_info_option_tree |
custom.info.option | tree | New | |
custom_info_option_tree_full |
custom.info.option | tree | Inherits custom_info_option_tree | |
custom_info_property_form |
custom.info.property | form | New | |
custom_info_property_form_full |
custom.info.property | field | Inherits custom_info_property_form | |
custom_info_property_search |
custom.info.property | search | New | |
custom_info_property_tree |
custom.info.property | tree | New | |
custom_info_property_tree_full |
custom.info.property | field | Inherits custom_info_property_tree | |
custom_info_template_form |
custom.info.template | form | New | |
custom_info_template_search |
custom.info.template | search | New | |
custom_info_template_tree |
custom.info.template | tree | New | |
custom_info_value_editable |
custom.info.value | custom_info | New | |
custom_info_value_form |
custom.info.value | form | New | |
custom_info_value_search |
custom.info.value | search | New | |
custom_info_value_tree |
custom.info.value | tree | New | |
custom_info_value_tree_editable |
custom.info.value | tree | Inherits custom_info_value_tree | |
res_config_settings_view_form |
Allow to enable custom information | res.config.settings | xpath | Inherits base_setup.res_config_settings_view_form |
view_partner_form |
res.partner | xpath | Inherits base.view_partner_form |
custom_info_ids
One2many → custom.info.value
auto_join=True
comodel_name='custom.info.value'
domain=<expr>
inverse_name='res_id'
string='Custom Properties'
custom_info_template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
domain=<expr>
string='Custom Information Template'
all_custom_info_templates(self)
get_custom_info_value(self, properties)
onchange(self, values, field_name, field_onchange)
unlink(self)
name
Char
index=True
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
help='Properties in this category.'
inverse_name='category_id'
string='Properties'
sequence
Integer
index=True
check_access_rule(self, operation)
name
Char
index=True
required=True
translate=True
property_ids
Many2many → custom.info.property
comodel_name='custom.info.property'
help='Properties where this option is enabled.'
string='Properties'
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
help='Additional template to be applied to the owner if this option is chosen.'
string='Additional template'
value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
help='Values that have set this option.'
inverse_name='value_id'
string='Values'
check_access_rule(self, operation)
category_id
Many2one → custom.info.category
comodel_name='custom.info.category'
string='Category'
category_sequence
Integer
readonly=True
related='category_id.sequence'
store=True
string='Category Sequence'
default_value
Char
help='Will be applied by default to all custom values of this property. This is a char field, so you have to enter some value that can be converted to the field type you choose.'
translate=True
field_type
Selection
compute='_compute_field_type'
selection=[('str', 'Text'), ('int', 'Whole number'), ('float', 'Decimal number'), ('bool', 'Yes/No'), ('date', 'Date'), ('id', 'Selection')]
store=True
info_value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
inverse_name='property_id'
string='Property Values'
maximum
Float
default=-1
help='For numeric fields, it means the maximum possible value; for text fields, it means the maximum possible length. If it is smaller than the minimum, then this check is skipped'
minimum
Float
help='For numeric fields, it means the minimum possible value; for text fields, it means the minimum possible length. If it is bigger than the maximum, then this check is skipped'
model
Char
auto_join=True
related='template_id.model'
name
Char
required=True
translate=True
option_ids
Many2many → custom.info.option
comodel_name='custom.info.option'
help="When the field type is 'selection', choose the available options here."
string='Options'
required
Boolean
sequence
Integer
index=True
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
ondelete='cascade'
required=True
string='Template'
widget
Selection
default='char'
help='Type of information that can be stored in the property.'
required=True
selection=[('boolean', 'Boolean'), ('float', 'Decimal'), ('integer', 'Integer'), ('date', 'Date'), ('char', 'Single line text'), ('text', 'Multi line Text'), ('html', 'Complex text'), ('many2one', 'Choice')]
check_access_rule(self, operation)
model
Char
compute='_compute_model'
inverse='_inverse_model'
search='_search_model'
string='Model technical name'
model_id
Many2one → ir.model
auto_join=True
comodel_name='ir.model'
ondelete='restrict'
required=True
string='Model'
name
Char
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
inverse_name='template_id'
string='Properties'
check_access_rule(self, operation)
write(self, vals)
category_id
Many2one
related='property_id.category_id'
store=True
category_sequence
Integer
related='property_id.category_id.sequence'
store=True
string='Category Sequence'
field_name
Char
compute='_compute_field_name'
help='Technical name of the field where the value is stored.'
field_type
Selection
related='property_id.field_type'
model
Char
auto_join=True
index=True
readonly=True
related='property_id.model'
store=True
name
Char
related='property_id.name'
owner_id
Reference
compute='_compute_owner_id'
help='Record that owns this custom value.'
inverse='_inverse_owner_id'
selection='_selection_owner_id'
string='Owner'
property_id
Many2one → custom.info.property
comodel_name='custom.info.property'
required=True
string='Property'
property_sequence
Integer
index=True
related='property_id.sequence'
store=True
required
Boolean
related='property_id.required'
res_id
Integer
index=True
ondelete='cascade'
required=True
string='Resource ID'
value
Char
compute='_compute_value'
help='Value, always converted to/from the typed field.'
inverse='_inverse_value'
search='_search_value'
value_bool
Boolean
index=True
string='Yes/No value'
value_date
Date
index=True
string='Date value'
value_float
Float
index=True
string='Decimal number value'
value_id
Many2one → custom.info.option
comodel_name='custom.info.option'
domain="[('property_ids', '=', property_id)]"
ondelete='cascade'
string='Selection value'
value_int
Integer
index=True
string='Whole number value'
value_str
Char
index=True
string='Text value'
translate=True
widget
Selection
readonly=True
related='property_id.widget'
check_access_rule(self, operation)
view_mode
Selection
selection_add=[('custom_info', 'Custom Info')]
No public methods.
type
Selection
selection_add=[('custom_info', 'Custom Info')]
No public methods.
group_custom_info_manager
Boolean
help='Allow all employees to manage custom information'
implied_group='base_custom_info.group_basic'
string='Manage custom information'
group_custom_info_partner
Boolean
help='Add a tab in the partners form to edit custom information'
implied_group='base_custom_info.group_partner'
string='Edit custom information in partners'
No public methods.
custom_info_ids
One2many
context={'default_model': _name}
custom_info_template_id
Many2one
context={'default_model': _name}
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/server-tools |
| GIT | |
| GIT | https://github.com/OCA/server-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/server-tools/tree/12.0/base_custom_info |
| VERSION | |
| VERSION | 2.1.0 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Enric Tobella, Alexandre Díaz, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Adrià Gil Sorribes |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/server-tools |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:22 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base_setup - base - web |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
Backend Assets (used in backend interface) | ir.ui.view | qweb | Inherits web.assets_backend |
custom_info_category_form |
custom.info.category | form | New | |
custom_info_category_search |
custom.info.category | search | New | |
custom_info_category_tree |
custom.info.category | tree | New | |
custom_info_option_form |
custom.info.option | form | New | |
custom_info_option_form_full |
custom.info.option | field | Inherits custom_info_option_form | |
custom_info_option_search |
custom.info.option | search | New | |
custom_info_option_tree |
custom.info.option | tree | New | |
custom_info_option_tree_full |
custom.info.option | tree | Inherits custom_info_option_tree | |
custom_info_property_form |
custom.info.property | form | New | |
custom_info_property_form_full |
custom.info.property | field | Inherits custom_info_property_form | |
custom_info_property_search |
custom.info.property | search | New | |
custom_info_property_tree |
custom.info.property | tree | New | |
custom_info_property_tree_full |
custom.info.property | field | Inherits custom_info_property_tree | |
custom_info_template_form |
custom.info.template | form | New | |
custom_info_template_search |
custom.info.template | search | New | |
custom_info_template_tree |
custom.info.template | tree | New | |
custom_info_value_editable |
custom.info.value | custom_info | New | |
custom_info_value_form |
custom.info.value | form | New | |
custom_info_value_search |
custom.info.value | search | New | |
custom_info_value_tree |
custom.info.value | tree | New | |
custom_info_value_tree_editable |
custom.info.value | tree | Inherits custom_info_value_tree | |
res_config_settings_view_form |
Allow to enable custom information | res.config.settings | xpath | Inherits base_setup.res_config_settings_view_form |
view_partner_form |
res.partner | xpath | Inherits base.view_partner_form |
custom_info_ids
One2many → custom.info.value
auto_join=True
comodel_name='custom.info.value'
domain=<expr>
inverse_name='res_id'
string='Custom Properties'
custom_info_template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
domain=<expr>
string='Custom Information Template'
all_custom_info_templates(self)
get_custom_info_value(self, properties)
onchange(self, values, field_name, field_onchange)
unlink(self)
name
Char
index=True
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
help='Properties in this category.'
inverse_name='category_id'
string='Properties'
sequence
Integer
index=True
check_access_rule(self, operation)
name
Char
index=True
required=True
translate=True
property_ids
Many2many → custom.info.property
comodel_name='custom.info.property'
help='Properties where this option is enabled.'
string='Properties'
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
help='Additional template to be applied to the owner if this option is chosen.'
string='Additional template'
value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
help='Values that have set this option.'
inverse_name='value_id'
string='Values'
check_access_rule(self, operation)
category_id
Many2one → custom.info.category
comodel_name='custom.info.category'
string='Category'
category_sequence
Integer
readonly=True
related='category_id.sequence'
store=True
string='Category Sequence'
default_value
Char
help='Will be applied by default to all custom values of this property. This is a char field, so you have to enter some value that can be converted to the field type you choose.'
translate=True
field_type
Selection
compute='_compute_field_type'
selection=[('str', 'Text'), ('int', 'Whole number'), ('float', 'Decimal number'), ('bool', 'Yes/No'), ('date', 'Date'), ('id', 'Selection')]
store=True
info_value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
inverse_name='property_id'
string='Property Values'
maximum
Float
default=-1
help='For numeric fields, it means the maximum possible value; for text fields, it means the maximum possible length. If it is smaller than the minimum, then this check is skipped'
minimum
Float
help='For numeric fields, it means the minimum possible value; for text fields, it means the minimum possible length. If it is bigger than the maximum, then this check is skipped'
model
Char
auto_join=True
readonly=True
related='template_id.model'
name
Char
required=True
translate=True
option_ids
Many2many → custom.info.option
comodel_name='custom.info.option'
help="When the field type is 'selection', choose the available options here."
string='Options'
required
Boolean
sequence
Integer
index=True
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
ondelete='cascade'
required=True
string='Template'
widget
Selection
default='char'
help='Type of information that can be stored in the property.'
required=True
selection=[('boolean', 'Boolean'), ('float', 'Decimal'), ('integer', 'Integer'), ('date', 'Date'), ('char', 'Single line text'), ('text', 'Multi line Text'), ('html', 'Complex text'), ('many2one', 'Choice')]
check_access_rule(self, operation)
model
Char
compute='_compute_model'
inverse='_inverse_model'
search='_search_model'
string='Model technical name'
model_id
Many2one → ir.model
auto_join=True
comodel_name='ir.model'
ondelete='restrict'
required=True
string='Model'
name
Char
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
inverse_name='template_id'
oldname='info_ids'
string='Properties'
check_access_rule(self, operation)
write(self, vals)
category_id
Many2one
readonly=True
related='property_id.category_id'
store=True
category_sequence
Integer
readonly=True
related='property_id.category_id.sequence'
store=True
string='Category Sequence'
field_name
Char
compute='_compute_field_name'
help='Technical name of the field where the value is stored.'
field_type
Selection
readonly=True
related='property_id.field_type'
model
Char
auto_join=True
compute_sudo=True
index=True
readonly=True
related='property_id.model'
store=True
name
Char
readonly=True
related='property_id.name'
owner_id
Reference
compute='_compute_owner_id'
compute_sudo=True
help='Record that owns this custom value.'
inverse='_inverse_owner_id'
selection='_selection_owner_id'
string='Owner'
property_id
Many2one → custom.info.property
comodel_name='custom.info.property'
required=True
string='Property'
property_sequence
Integer
index=True
readonly=True
related='property_id.sequence'
store=True
required
Boolean
readonly=True
related='property_id.required'
res_id
Integer
index=True
ondelete='cascade'
required=True
store=True
string='Resource ID'
value
Char
compute='_compute_value'
help='Value, always converted to/from the typed field.'
search='_search_value'
value_bool
Boolean
index=True
string='Yes/No value'
value_date
Date
index=True
string='Date value'
value_float
Float
index=True
string='Decimal number value'
value_id
Many2one → custom.info.option
comodel_name='custom.info.option'
domain="[('property_ids', '=', property_id)]"
ondelete='cascade'
string='Selection value'
value_int
Integer
index=True
string='Whole number value'
value_str
Char
index=True
string='Text value'
translate=True
widget
Selection
readonly=True
related='property_id.widget'
check_access_rule(self, operation)
view_mode
Selection
selection_add=[('custom_info', 'Custom Info')]
No public methods.
type
Selection
selection_add=[('custom_info', 'Custom Info')]
No public methods.
group_custom_info_manager
Boolean
help='Allow all employees to manage custom information'
implied_group='base_custom_info.group_basic'
string='Manage custom information'
group_custom_info_partner
Boolean
help='Add a tab in the partners form to edit custom information'
implied_group='base_custom_info.group_partner'
string='Edit custom information in partners'
No public methods.
custom_info_ids
One2many
context={'default_model': _name}
custom_info_template_id
Many2one
context={'default_model': _name}
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/server-tools |
| GIT | |
| GIT | https://github.com/OCA/server-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/server-tools/tree/10.0/base_custom_info |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Laurent Mignon (ACSONE), oca-travis, Weblate, OCA-git-bot, Fanha Giang |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/server-tools |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:19:59 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base_setup - base - web_kanban - web |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
custom_info_category_form |
custom.info.category | form | New | |
custom_info_category_search |
custom.info.category | search | New | |
custom_info_category_tree |
custom.info.category | tree | New | |
custom_info_option_form |
custom.info.option | form | New | |
custom_info_option_form_full |
custom.info.option | field | Inherits custom_info_option_form | |
custom_info_option_search |
custom.info.option | search | New | |
custom_info_option_tree |
custom.info.option | tree | New | |
custom_info_option_tree_full |
custom.info.option | tree | Inherits custom_info_option_tree | |
custom_info_property_form |
custom.info.property | form | New | |
custom_info_property_form_full |
custom.info.property | field | Inherits custom_info_property_form | |
custom_info_property_search |
custom.info.property | search | New | |
custom_info_property_tree |
custom.info.property | tree | New | |
custom_info_property_tree_full |
custom.info.property | field | Inherits custom_info_property_tree | |
custom_info_template_form |
custom.info.template | form | New | |
custom_info_template_search |
custom.info.template | search | New | |
custom_info_template_tree |
custom.info.template | tree | New | |
custom_info_value_form |
custom.info.value | form | New | |
custom_info_value_search |
custom.info.value | search | New | |
custom_info_value_tree |
custom.info.value | tree | New | |
custom_info_value_tree_editable |
custom.info.value | tree | Inherits custom_info_value_tree | |
view_general_configuration |
Allow to enable partners custom info | base.config.settings | xpath | Inherits base_setup.view_general_configuration |
view_partner_form |
res.partner | xpath | Inherits base.view_partner_form |
group_custom_info_manager
Boolean
help='Allow all employees to manage custom information'
implied_group='base_custom_info.group_basic'
string='Manage custom information'
group_custom_info_partner
Boolean
help='Add a tab in the partners form to edit custom information'
implied_group='base_custom_info.group_partner'
string='Edit custom information in partners'
No public methods.
custom_info_ids
One2many → custom.info.value
auto_join=True
comodel_name='custom.info.value'
domain=<expr>
inverse_name='res_id'
string='Custom Properties'
custom_info_template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
domain=<expr>
string='Custom Information Template'
all_custom_info_templates(self)
get_custom_info_value(self, properties)
onchange(self, values, field_name, field_onchange)
unlink(self)
name
Char
index=True
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
help='Properties in this category.'
inverse_name='category_id'
string='Properties'
sequence
Integer
index=True
check_access_rule(self, operation)
name
Char
index=True
required=True
translate=True
property_ids
Many2many → custom.info.property
comodel_name='custom.info.property'
help='Properties where this option is enabled.'
string='Properties'
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
help='Additional template to be applied to the owner if this option is chosen.'
string='Additional template'
value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
help='Values that have set this option.'
inverse_name='value_id'
string='Values'
check_access_rule(self, operation)
category_id
Many2one → custom.info.category
comodel_name='custom.info.category'
string='Category'
category_sequence
Integer
readonly=True
related='category_id.sequence'
store=True
default_value
Char
help='Will be applied by default to all custom values of this property. This is a char field, so you have to enter some value that can be converted to the field type you choose.'
translate=True
field_type
Selection
default='str'
help='Type of information that can be stored in the property.'
required=True
selection=[('str', 'Text'), ('int', 'Whole number'), ('float', 'Decimal number'), ('bool', 'Yes/No'), ('id', 'Selection')]
info_value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
inverse_name='property_id'
string='Property Values'
maximum
Float
default=-1
help='For numeric fields, it means the maximum possible value; for text fields, it means the maximum possible length. If it is smaller than the minimum, then this check is skipped'
minimum
Float
help='For numeric fields, it means the minimum possible value; for text fields, it means the minimum possible length. If it is bigger than the maximum, then this check is skipped'
model
Char
auto_join=True
readonly=True
related='template_id.model'
name
Char
required=True
translate=True
option_ids
Many2many → custom.info.option
comodel_name='custom.info.option'
help="When the field type is 'selection', choose the available options here."
string='Options'
required
Boolean
sequence
Integer
index=True
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
ondelete='cascade'
required=True
string='Template'
check_access_rule(self, operation)
model
Char
compute='_compute_model'
inverse='_inverse_model'
search='_search_model'
string='Model technical name'
model_id
Many2one → ir.model
auto_join=True
comodel_name='ir.model'
ondelete='restrict'
required=True
string='Model'
name
Char
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
inverse_name='template_id'
oldname='info_ids'
string='Properties'
check_access_rule(self, operation)
write(self, vals)
category_id
Many2one
readonly=True
related='property_id.category_id'
store=True
category_sequence
Integer
readonly=True
related='property_id.category_id.sequence'
store=True
field_name
Char
compute='_compute_field_name'
help='Technical name of the field where the value is stored.'
field_type
Selection
readonly=True
related='property_id.field_type'
model
Char
auto_join=True
index=True
readonly=True
related='property_id.model'
store=True
name
Char
readonly=True
related='property_id.name'
owner_id
Reference
compute='_compute_owner_id'
help='Record that owns this custom value.'
inverse='_inverse_owner_id'
selection='_selection_owner_id'
string='Owner'
property_id
Many2one → custom.info.property
comodel_name='custom.info.property'
readonly=True
required=True
string='Property'
property_sequence
Integer
index=True
readonly=True
related='property_id.sequence'
store=True
required
Boolean
readonly=True
related='property_id.required'
res_id
Integer
index=True
ondelete='cascade'
required=True
store=True
string='Resource ID'
value
Char
compute='_compute_value'
help='Value, always converted to/from the typed field.'
inverse='_inverse_value'
search='_search_value'
value_bool
Boolean
index=True
string='Yes/No value'
value_float
Float
index=True
string='Decimal number value'
value_id
Many2one → custom.info.option
comodel_name='custom.info.option'
domain="[('property_ids', 'in', [property_id])]"
ondelete='cascade'
string='Selection value'
value_int
Integer
index=True
string='Whole number value'
value_str
Char
index=True
string='Text value'
translate=True
check_access_rule(self, operation)
custom_info_ids
One2many
context={'default_model': _name}
custom_info_template_id
Many2one
context={'default_model': _name}
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/server-tools |
| GIT | |
| GIT | https://github.com/OCA/server-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/server-tools/tree/9.0/base_custom_info |
| VERSION | |
| VERSION | 2.0.0 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA) |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA) |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, Jairo Llopis, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate |
| WEBSITE | |
| WEBSITE | https://www.tecnativa.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:15:22 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base_setup - base - web_kanban - web |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
custom_info_category_form |
custom.info.category | form | New | |
custom_info_category_search |
custom.info.category | search | New | |
custom_info_category_tree |
custom.info.category | tree | New | |
custom_info_option_form |
custom.info.option | form | New | |
custom_info_option_form_full |
custom.info.option | field | Inherits custom_info_option_form | |
custom_info_option_search |
custom.info.option | search | New | |
custom_info_option_tree |
custom.info.option | tree | New | |
custom_info_option_tree_full |
custom.info.option | tree | Inherits custom_info_option_tree | |
custom_info_property_form |
custom.info.property | form | New | |
custom_info_property_form_full |
custom.info.property | field | Inherits custom_info_property_form | |
custom_info_property_search |
custom.info.property | search | New | |
custom_info_property_tree |
custom.info.property | tree | New | |
custom_info_property_tree_full |
custom.info.property | field | Inherits custom_info_property_tree | |
custom_info_template_form |
custom.info.template | form | New | |
custom_info_template_search |
custom.info.template | search | New | |
custom_info_template_tree |
custom.info.template | tree | New | |
custom_info_value_form |
custom.info.value | form | New | |
custom_info_value_search |
custom.info.value | search | New | |
custom_info_value_tree |
custom.info.value | tree | New | |
custom_info_value_tree_editable |
custom.info.value | tree | Inherits custom_info_value_tree | |
view_general_configuration |
Allow to enable partners custom info | base.config.settings | xpath | Inherits base_setup.view_general_configuration |
view_partner_form |
res.partner | xpath | Inherits base.view_partner_form |
group_custom_info_manager
Boolean
help='Allow all employees to manage custom information'
implied_group='base_custom_info.group_basic'
string='Manage custom information'
group_custom_info_partner
Boolean
help='Add a tab in the partners form to edit custom information'
implied_group='base_custom_info.group_partner'
string='Edit custom information in partners'
No public methods.
custom_info_ids
One2many → custom.info.value
auto_join=True
comodel_name='custom.info.value'
domain=<expr>
inverse_name='res_id'
string='Custom Properties'
custom_info_template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
domain=<expr>
string='Custom Information Template'
all_custom_info_templates(self)
get_custom_info_value(self, properties)
onchange(self, values, field_name, field_onchange)
unlink(self)
name
Char
index=True
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
help='Properties in this category.'
inverse_name='category_id'
string='Properties'
sequence
Integer
index=True
check_access_rule(self, operation)
name
Char
index=True
required=True
translate=True
property_ids
Many2many → custom.info.property
comodel_name='custom.info.property'
help='Properties where this option is enabled.'
string='Properties'
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
help='Additional template to be applied to the owner if this option is chosen.'
string='Additional template'
value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
help='Values that have set this option.'
inverse_name='value_id'
string='Values'
check_access_rule(self, operation)
category_id
Many2one → custom.info.category
comodel_name='custom.info.category'
string='Category'
category_sequence
Integer
readonly=True
related='category_id.sequence'
store=True
default_value
Char
help='Will be applied by default to all custom values of this property. This is a char field, so you have to enter some value that can be converted to the field type you choose.'
translate=True
field_type
Selection
default='str'
help='Type of information that can be stored in the property.'
required=True
selection=[('str', 'Text'), ('int', 'Whole number'), ('float', 'Decimal number'), ('bool', 'Yes/No'), ('id', 'Selection')]
info_value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
inverse_name='property_id'
string='Property Values'
maximum
Float
default=-1
help='For numeric fields, it means the maximum possible value; for text fields, it means the maximum possible length. If it is smaller than the minimum, then this check is skipped'
minimum
Float
help='For numeric fields, it means the minimum possible value; for text fields, it means the minimum possible length. If it is bigger than the maximum, then this check is skipped'
model
Char
auto_join=True
readonly=True
related='template_id.model'
name
Char
required=True
translate=True
option_ids
Many2many → custom.info.option
comodel_name='custom.info.option'
help="When the field type is 'selection', choose the available options here."
string='Options'
required
Boolean
sequence
Integer
index=True
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
ondelete='cascade'
required=True
string='Template'
check_access_rule(self, operation)
model
Char
compute='_compute_model'
inverse='_inverse_model'
search='_search_model'
string='Model technical name'
model_id
Many2one → ir.model
auto_join=True
comodel_name='ir.model'
ondelete='restrict'
required=True
string='Model'
name
Char
required=True
translate=True
property_ids
One2many → custom.info.property
comodel_name='custom.info.property'
inverse_name='template_id'
oldname='info_ids'
string='Properties'
check_access_rule(self, operation)
category_id
Many2one
readonly=True
related='property_id.category_id'
store=True
category_sequence
Integer
readonly=True
related='property_id.category_id.sequence'
store=True
field_name
Char
compute='_compute_field_name'
help='Technical name of the field where the value is stored.'
field_type
Selection
readonly=True
related='property_id.field_type'
model
Char
auto_join=True
index=True
readonly=True
related='property_id.model'
store=True
name
Char
readonly=True
related='property_id.name'
owner_id
Reference
compute='_compute_owner_id'
help='Record that owns this custom value.'
inverse='_inverse_owner_id'
selection='_selection_owner_id'
string='Owner'
property_id
Many2one → custom.info.property
comodel_name='custom.info.property'
readonly=True
required=True
string='Property'
property_sequence
Integer
index=True
readonly=True
related='property_id.sequence'
store=True
required
Boolean
readonly=True
related='property_id.required'
res_id
Integer
index=True
ondelete='cascade'
required=True
store=True
string='Resource ID'
value
Char
compute='_compute_value'
help='Value, always converted to/from the typed field.'
inverse='_inverse_value'
search='_search_value'
value_bool
Boolean
index=True
string='Yes/No value'
value_float
Float
index=True
string='Decimal number value'
value_id
Many2one → custom.info.option
comodel_name='custom.info.option'
domain="[('property_ids', 'in', [property_id])]"
ondelete='cascade'
string='Selection value'
value_int
Integer
index=True
string='Whole number value'
value_str
Char
index=True
string='Text value'
translate=True
check_access_rule(self, operation)
custom_info_ids
One2many
context={'default_model': _name}
custom_info_template_id
Many2one
context={'default_model': _name}
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/server-tools |
| GIT | |
| GIT | https://github.com/OCA/server-tools.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/server-tools/tree/8.0/base_custom_info |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Antiun Ingeniería S.L., Incaser Informatica S.L. |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Antiun Ingeniería S.L., Incaser Informatica S.L. |
| COMMITTERS | |
| COMMITTERS | Jairo Llopis, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate, OCA-git-bot |
| WEBSITE | |
| WEBSITE | http://www.antiun.com |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:11:25 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
base_custom_info_template_form |
base.custom.info.template.form | custom.info.template | form | New |
base_custom_info_template_line_form |
base.custom.info.property.form | custom.info.property | form | New |
base_custom_info_template_line_tree |
base.custom.info.property.tree | custom.info.property | tree | New |
base_custom_info_template_tree |
base.custom.info.template.tree | custom.info.template | tree | New |
base_custom_info_value_tree |
base.custom.info.value.tree | custom.info.value | tree | New |
custom_info_ids
One2many → custom.info.value
auto_join=True
comodel_name='custom.info.value'
domain=<expr>
inverse_name='res_id'
string='Custom Properties'
custom_info_template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
string='Custom Information Template'
unlink(self)
model
Char
index=True
readonly=True
required=True
model_id
Many2one → ir.model
compute='_compute_model_id'
store=True
args: 'ir.model', 'Model'
No public methods.
info_value_ids
One2many → custom.info.value
comodel_name='custom.info.value'
inverse_name='property_id'
string='Property Values'
name
Char
translate=True
template_id
Many2one → custom.info.template
comodel_name='custom.info.template'
string='Template'
No public methods.
info_ids
One2many → custom.info.property
name
Char
required=True
translate=True
No public methods.
name
Char
related='property_id.name'
property_id
Many2one → custom.info.property
comodel_name='custom.info.property'
required=True
string='Property'
res_id
Integer
index=True
required=True
args: 'Resource ID'
value
Char
translate=True
No public methods.