| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/19.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | Ronald Portier, Weblate, OCA-git-bot, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:40:47 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - html_editor - sales_team |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module aims to provide generic means to model relations between partners. Examples would be 'is sibling of' or 'is friend of', but also 'has contract X with' or 'is assistant of'. This way, you can encode your knowledge about your partners directly in your partner list. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation |
res.partner.relation | form | New | |
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation |
res.partner.relation | search | New | |
tree_res_partner_relation |
res.partner.relation | list | New | |
tree_res_partner_relation_type |
res.partner.relation.type | list | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | field | Inherits base.view_res_partner_filter |
relation_count
Integer
compute='_compute_relation_count'
relation_left_ids
One2many → res.partner.relation
comodel_name='res.partner.relation'
copy=False
inverse_name='left_partner_id'
string='Left relations with current partner'
relation_right_ids
One2many → res.partner.relation
comodel_name='res.partner.relation'
copy=False
inverse_name='right_partner_id'
string='Right relations with current partner'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_relation_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_relation_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
action_view_relations(self)
search(self, domain, offset=0, limit=None, order=None)
active
Boolean
default=True
help='Records with date_end in the past should be inactive'
readonly=True
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
bypass_search_access=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
left_partner_id_domain
Binary
compute='_compute_left_partner_id_domain'
default=[]
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_other_partner_id'
help='Partner shown right when no currently active partner, or connected partnes as seen from current partner.'
right_partner_id
Many2one → res.partner
bypass_search_access=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
right_partner_id_domain
Binary
compute='_compute_right_partner_id_domain'
default=[]
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute='_compute_this_partner_id'
help='Partner shown left when no currently active partner'
type_id
Many2one → res.partner.relation.type
bypass_search_access=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
type_id_display
Char
compute='_compute_type_id_display'
help='In current context relation is inverse'
type_id_domain
Binary
compute='_compute_type_id_domain'
default=[]
create(self, vals_list)
default_get(self, fields_list)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
left_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
left_partner_type
Selection
selection='get_partner_types'
string='Left partner type'
name
Char
required=True
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
right_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
right_partner_type
Selection
selection='get_partner_types'
string='Right partner type'
check_existing(self, vals)
create(self, vals_list)
get_partner_types(self)
unlink(self)
write(self, vals)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/18.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, David Moreno, mchechlacz |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:10 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - html_editor - sales_team |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module aims to provide generic means to model relations between partners. Examples would be 'is sibling of' or 'is friend of', but also 'has contract X with' or 'is assistant of'. This way, you can encode your knowledge about your partners directly in your partner list. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all | search | New | |
tree_res_partner_relation_all |
res.partner.relation.all | list | New | |
tree_res_partner_relation_type |
res.partner.relation.type | list | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | field | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
inverse_name='this_partner_id'
search=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
action_view_relations(self)
get_partner_type(self)
search(self, args, offset=0, limit=None, order=None)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
create(self, vals_list)
active
Boolean
help='Records with date_end in the past are inactive'
readonly=True
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
readonly=True
string='Is reverse type?'
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
res_id
Integer
help='The id of the object in the model this relation is based on.'
readonly=True
required=True
string='Resource ID'
res_model
Char
help='The database object this relation is based on.'
readonly=True
required=True
string='Resource Model'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
readonly=True
required=True
string='Underlying Relation Type'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
create(self, vals_list)
get_base_resource(self)
get_register(self)
get_select_specification(self, base_name, is_inverse)
onchange_partner_id(self)
onchange_type_selection_id(self)
register_specification(self, register, base_name, is_inverse, select_sql)
unlink(self)
unlink_resource(self, base_resource)
write(self, vals)
write_resource(self, base_resource, vals)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
name
Char
required=True
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
create(self, vals_list)
get_partner_types(self)
unlink(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection='get_partner_types'
string="Other record's partner type"
contact_type_this
Selection
selection='get_partner_types'
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
required=True
translate=True
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
get_partner_types(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/17.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Jérémy Didderen, Joachim David |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:04 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - sales_team |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | This module aims to provide generic means to model relations between partners. Examples would be 'is sibling of' or 'is friend of', but also 'has contract X with' or 'is assistant of'. This way, you can encode your knowledge about your partners directly in your partner list. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all | search | New | |
tree_res_partner_relation_all |
res.partner.relation.all | tree | New | |
tree_res_partner_relation_type |
res.partner.relation.type | tree | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | field | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
inverse_name='this_partner_id'
search=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
action_view_relations(self)
get_partner_type(self)
search(self, args, offset=0, limit=None, order=None)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
create(self, vals_list)
active
Boolean
help='Records with date_end in the past are inactive'
readonly=True
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
readonly=True
string='Is reverse type?'
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
res_id
Integer
help='The id of the object in the model this relation is based on.'
readonly=True
required=True
string='Resource ID'
res_model
Char
help='The database object this relation is based on.'
readonly=True
required=True
string='Resource Model'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
readonly=True
required=True
string='Underlying Relation Type'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
create(self, vals_list)
get_base_resource(self)
get_register(self)
get_select_specification(self, base_name, is_inverse)
onchange_partner_id(self)
onchange_type_selection_id(self)
register_specification(self, register, base_name, is_inverse, select_sql)
unlink(self)
unlink_resource(self, base_resource)
write(self, vals)
write_resource(self, base_resource, vals)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
name
Char
required=True
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
create(self, vals_list)
get_partner_types(self)
unlink(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection='get_partner_types'
string="Other record's partner type"
contact_type_this
Selection
selection='get_partner_types'
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
required=True
translate=True
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
get_partner_types(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/16.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.5.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | Ronald Portier, Ronald Portier (Therp BV), Weblate, OCA-git-bot, oca-ci, Marie Lejeune |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:44 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - sales_team |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all | search | New | |
tree_res_partner_relation_all |
res.partner.relation.all | tree | New | |
tree_res_partner_relation_type |
res.partner.relation.type | tree | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | field | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
inverse_name='this_partner_id'
search=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
action_view_relations(self)
get_partner_type(self)
search(self, args, offset=0, limit=None, order=None, count=False)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
create(self, vals_list)
active
Boolean
help='Records with date_end in the past are inactive, as well as records for inactive partners.'
readonly=True
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
readonly=True
string='Is reverse type?'
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
res_id
Integer
help='The id of the object in the model this relation is based on.'
readonly=True
required=True
string='Resource ID'
res_model
Char
help='The database object this relation is based on.'
readonly=True
required=True
string='Resource Model'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
readonly=True
required=True
string='Underlying Relation Type'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
create(self, vals_list)
get_base_resource(self)
get_register(self)
get_select_specification(self, base_name, is_inverse)
name_get(self)
onchange_partner_id(self)
onchange_type_selection_id(self)
register_specification(self, register, base_name, is_inverse, select_sql)
unlink(self)
unlink_resource(self, base_resource)
write(self, vals)
write_resource(self, base_resource, vals)
active
Boolean
default=True
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
name
Char
required=True
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
create(self, vals_list)
get_partner_types(self)
unlink(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection='get_partner_types'
string="Other record's partner type"
contact_type_this
Selection
selection='get_partner_types'
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
required=True
translate=True
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
get_partner_types(self)
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/15.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | GitHub, Weblate, OCA-git-bot, Raf Ven, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:32 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - sales_team |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all | search | New | |
tree_res_partner_relation_all |
res.partner.relation.all | tree | New | |
tree_res_partner_relation_type |
res.partner.relation.type | tree | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | field | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
inverse_name='this_partner_id'
search=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
action_view_relations(self)
get_partner_type(self)
search(self, args, offset=0, limit=None, order=None, count=False)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
create(self, vals)
active
Boolean
help='Records with date_end in the past are inactive'
readonly=True
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
readonly=True
string='Is reverse type?'
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
res_id
Integer
help='The id of the object in the model this relation is based on.'
readonly=True
required=True
string='Resource ID'
res_model
Char
help='The database object this relation is based on.'
readonly=True
required=True
string='Resource Model'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
readonly=True
required=True
string='Underlying Relation Type'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
create(self, vals)
create_resource(self, vals, type_selection)
get_base_resource(self)
get_register(self)
get_select_specification(self, base_name, is_inverse)
name_get(self)
onchange_partner_id(self)
onchange_type_selection_id(self)
register_specification(self, register, base_name, is_inverse, select_sql)
unlink(self)
unlink_resource(self, base_resource)
write(self, vals)
write_resource(self, base_resource, vals)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
name
Char
required=True
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
create(self, vals)
get_partner_types(self)
unlink(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection='get_partner_types'
string="Other record's partner type"
contact_type_this
Selection
selection='get_partner_types'
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
get_partner_types(self)
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/14.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | OCA Transbot, oca-travis, Weblate, OCA-git-bot, Raf Ven, Tobias Zehntner, Alessio Renda |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:40:56 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - sales_team |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all | search | New | |
tree_res_partner_relation_all |
res.partner.relation.all | tree | New | |
tree_res_partner_relation_type |
res.partner.relation.type | tree | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | field | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
inverse_name='this_partner_id'
search=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
string='Relation Count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
action_view_relations(self)
get_partner_type(self)
search(self, args, offset=0, limit=None, order=None, count=False)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
create(self, vals)
active
Boolean
help='Records with date_end in the past are inactive'
readonly=True
string='Active'
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
readonly=True
string='Is reverse type?'
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Other Partner'
res_id
Integer
help='The id of the object in the model this relation is based on.'
readonly=True
required=True
string='Resource ID'
res_model
Char
help='The database object this relation is based on.'
readonly=True
required=True
string='Resource Model'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
readonly=True
required=True
string='Underlying Relation Type'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
create(self, vals)
create_resource(self, vals, type_selection)
get_base_resource(self)
get_register(self)
get_select_specification(self, base_name, is_inverse)
name_get(self)
onchange_partner_id(self)
onchange_type_selection_id(self)
register_specification(self, register, base_name, is_inverse, select_sql)
unlink(self)
unlink_resource(self, base_resource)
write(self, vals)
write_resource(self, base_resource, vals)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
name
Char
required=True
string='Name'
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
create(self, vals)
get_partner_types(self)
unlink(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection='get_partner_types'
string="Other record's partner type"
contact_type_this
Selection
selection='get_partner_types'
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
string='Type'
get_partner_types(self)
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/13.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | Ronald Portier, OCA Transbot, oca-travis, Weblate, OCA-git-bot, mara1 |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:11 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - contacts - base - base_setup - web - bus - web_tour - sales_team |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all | search | New | |
tree_res_partner_relation_all |
res.partner.relation.all | tree | New | |
tree_res_partner_relation_type |
res.partner.relation.type | tree | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | field | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
inverse_name='this_partner_id'
selectable=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
string='Relation Count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
action_view_relations(self)
get_partner_type(self)
search(self, args, offset=0, limit=None, order=None, count=False)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
create(self, vals)
active
Boolean
help='Records with date_end in the past are inactive'
readonly=True
string='Active'
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
readonly=True
string='Is reverse type?'
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Other Partner'
res_id
Integer
help='The id of the object in the model this relation is based on.'
readonly=True
required=True
string='Resource ID'
res_model
Char
help='The database object this relation is based on.'
readonly=True
required=True
string='Resource Model'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
readonly=True
required=True
string='Underlying Relation Type'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
create(self, vals)
create_resource(self, vals, type_selection)
get_base_resource(self)
get_register(self)
get_select_specification(self, base_name, is_inverse)
name_get(self)
onchange_partner_id(self)
onchange_type_selection_id(self)
register_specification(self, register, base_name, is_inverse, select_sql)
unlink(self)
unlink_resource(self, base_resource)
write(self, vals)
write_resource(self, base_resource, vals)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
name
Char
required=True
string='Name'
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
create(self, vals)
get_partner_types(self)
unlink(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection='get_partner_types'
string="Other record's partner type"
contact_type_this
Selection
selection='get_partner_types'
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
string='Type'
get_partner_types(self)
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/12.0/partner_multi_relation |
| VERSION | |
| VERSION | 2.0.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | Ronald Portier, Pedro M. Baeza, GitHub, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Simone Orsi, oca-ci, scampbell, Stephan Keller, Patrick Wilson |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:16 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
OCA/web: - web_domain_field - web_tree_many2one_clickable odoo/odoo: - contacts - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation_all |
res.partner.relation.all.form | res.partner.relation.all | form | New |
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all.filter | res.partner.relation.all | search | New |
search_res_partner_relation_type |
res.partner.relation.type | search | New | |
tree_res_partner_relation |
res.partner.relation | tree | New | |
tree_res_partner_relation_all |
res.partner.relation.all.tree | res.partner.relation.all | tree | New |
tree_res_partner_relation_type |
res.partner.relation.type | tree | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | field | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
domain=['|', ('active', '=', True), ('active', '=', False)]
inverse_name='this_partner_id'
selectable=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
string='Relation Count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
action_view_relations(self)
get_partner_type(self)
search(self, args, **kwargs)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
create(self, vals_list)
get_derived_inverse_relation(self)
get_derived_relation(self)
name_get(self)
active
Boolean
compute='_compute_active'
help='Records with date_end in the past are inactive'
readonly=True
search='_search_active'
string='Active'
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
readonly=True
string='Is reverse type?'
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Other Partner'
other_partner_id_domain
Char
compute='_compute_domains'
readonly=True
store=False
res_id
Integer
help='The id of the object in the model this relation is based on.'
readonly=True
required=True
string='Resource ID'
res_model
Char
help='The database object this relation is based on.'
readonly=True
required=True
string='Resource Model'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
this_partner_id_domain
Char
compute='_compute_domains'
readonly=True
store=False
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
readonly=True
required=True
string='Underlying Relation Type'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
type_selection_id_domain
Char
compute='_compute_domains'
readonly=True
store=False
create(self, vals_list)
create_resource(self, vals, type_selection)
get_base_resource(self)
get_register(self)
get_select_specification(self, base_name, is_inverse)
name_get(self)
onchange_partner_id(self)
onchange_type_selection_id(self)
register_specification(self, register, base_name, is_inverse, select_sql)
unlink(self)
unlink_resource(self, base_resource)
write(self, vals)
write_resource(self, base_resource, vals)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
name
Char
required=True
string='Name'
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
create(self, vals_list)
get_partner_types(self)
unlink(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection='get_partner_types'
string="Other record's partner type"
contact_type_this
Selection
selection='get_partner_types'
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
string='Type'
get_partner_types(self)
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/11.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.1.0 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | Holger Brunn, Maxime Chambreuil, Pedro M. Baeza, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Stephan Keller |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:23:56 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - contacts - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all | search | New | |
tree_res_partner_relation_all |
res.partner.relation.all | tree | New | |
tree_res_partner_relation_type |
res.partner.relation.type | tree | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | data | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
inverse_name='this_partner_id'
selectable=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
string='Relation Count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
get_partner_type(self)
search(self, args, offset=0, limit=None, order=None, count=False)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
check_is_unique(self, vals)
create(self, vals)
write(self, vals)
active
Boolean
help='Records with date_end in the past are inactive'
readonly=True
string='Active'
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
readonly=True
string='Is reverse type?'
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Other Partner'
res_id
Integer
help='The id of the object in the model this relation is based on.'
readonly=True
required=True
string='Resource ID'
res_model
Char
help='The database object this relation is based on.'
readonly=True
required=True
string='Resource Model'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
readonly=True
required=True
string='Underlying Relation Type'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
create(self, vals)
create_resource(self, vals, type_selection)
get_base_resource(self)
get_register(self)
get_select_specification(self, base_name, is_inverse)
name_get(self)
onchange_partner_id(self)
onchange_type_selection_id(self)
register_specification(self, register, base_name, is_inverse, select_sql)
unlink(self)
unlink_resource(self, base_resource)
write(self, vals)
write_resource(self, base_resource, vals)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
is_unique
Boolean
help='If a relation type is unique, then there cannot be 2relations with the same parties and the same type.'
string='Is Unique'
name
Char
required=True
string='Name'
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
create(self, vals)
get_partner_types(self)
unlink(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection='get_partner_types'
string="Other record's partner type"
contact_type_this
Selection
selection='get_partner_types'
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
string='Type'
get_partner_types(self)
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/10.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.0.2 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | Ronald Portier, Holger Brunn, Pedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate |
| WEBSITE | |
| WEBSITE | https://github.com/oca/partner-contact |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:19:55 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sales_team - base - base_setup - web_kanban - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all | search | New | |
tree_res_partner_relation_all |
res.partner.relation.all | tree | New | |
tree_res_partner_relation_type |
res.partner.relation.type | tree | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | data | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
inverse_name='this_partner_id'
selectable=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
string='Relation Count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
get_partner_type(self)
search(self, args, offset=0, limit=None, order=None, count=False)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
create(self, vals)
active
Boolean
help='Records with date_end in the past are inactive'
readonly=True
string='Active'
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
readonly=True
string='Is reverse type?'
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Other Partner'
res_id
Integer
help='The id of the object in the model this relation is based on.'
readonly=True
required=True
string='Resource ID'
res_model
Char
help='The database object this relation is based on.'
readonly=True
required=True
string='Resource Model'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
readonly=True
required=True
string='Underlying Relation Type'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
create(self, vals)
create_resource(self, vals, type_selection)
fields_get(self, allfields=None, attributes=None)
get_base_resource(self)
get_register(self)
get_select_specification(self, base_name, is_inverse)
name_get(self)
onchange_partner_id(self)
onchange_type_selection_id(self)
register_specification(self, register, base_name, is_inverse, select_sql)
unlink(self)
unlink_resource(self, base_resource)
write(self, vals)
write_resource(self, base_resource, vals)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
name
Char
required=True
string='Name'
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
create(self, vals)
get_partner_types(self)
unlink(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection='get_partner_types'
string="Other record's partner type"
contact_type_this
Selection
selection='get_partner_types'
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
string='Type'
get_partner_types(self)
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/partner-contact |
| GIT | |
| GIT | https://github.com/OCA/partner-contact.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/partner-contact/tree/9.0/partner_multi_relation |
| VERSION | |
| VERSION | 1.1.1 |
| CATEGORY | |
| CATEGORY | Customer Relationship Management |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| MAINTAINERS | |
| MAINTAINERS | Odoo Community Association (OCA), Camptocamp, Therp BV |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:15:19 |
| 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 |
|---|---|---|---|---|
form_res_partner_relation_type |
res.partner.relation.type | form | New | |
search_res_partner_relation_all |
res.partner.relation.all | search | New | |
tree_res_partner_relation_all |
res.partner.relation.all | tree | New | |
tree_res_partner_relation_type |
res.partner.relation.type | tree | New | |
view_partner_form |
partner_multi_relation.view_partner_form | res.partner | xpath | Inherits base.view_partner_form |
view_res_partner_filter |
partner_multi_relation.view_partner_filter | res.partner | data | Inherits base.view_res_partner_filter |
relation_all_ids
One2many → res.partner.relation.all
auto_join=True
comodel_name='res.partner.relation.all'
copy=False
inverse_name='this_partner_id'
selectable=False
string='All relations with current partner'
relation_count
Integer
compute='_compute_relation_count'
string='Relation Count'
search_relation_date
Date
compute=<expr>
search='_search_relation_date'
string='Relation valid'
search_relation_partner_category_id
Many2one → res.partner.category
comodel_name='res.partner.category'
compute=<expr>
search='_search_related_partner_category_id'
string='Has relation with a partner in category'
search_relation_partner_id
Many2one → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_related_partner_id'
string='Has relation with'
search_relation_type_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
compute=<expr>
search='_search_relation_type_id'
string='Has relation of type'
get_partner_type(self)
search(self, args, offset=0, limit=None, order=None, count=False)
date_end
Date
date_start
Date
left_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Source Partner'
right_partner_id
Many2one → res.partner
auto_join=True
comodel_name='res.partner'
ondelete='cascade'
required=True
string='Destination Partner'
type_id
Many2one → res.partner.relation.type
auto_join=True
comodel_name='res.partner.relation.type'
required=True
string='Type'
create(self, vals)
active
Boolean
help='Records with date_end in the past are inactive'
string='Active'
any_partner_id
Many2many → res.partner
comodel_name='res.partner'
compute=<expr>
search='_search_any_partner_id'
string='Partner'
date_end
Date
date_start
Date
other_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='Other Partner'
record_type
Selection
readonly=True
selection=_RECORD_TYPES
string='Record Type'
relation_id
Many2one → res.partner.relation
comodel_name='res.partner.relation'
readonly=True
string='Relation'
this_partner_id
Many2one → res.partner
comodel_name='res.partner'
required=True
string='One Partner'
type_selection_id
Many2one → res.partner.relation.type.selection
comodel_name='res.partner.relation.type.selection'
required=True
string='Relation Type'
create(self, vals)
name_get(self)
onchange_partner_id(self)
onchange_type_selection_id(self)
unlink(self)
write(self, vals)
allow_self
Boolean
default=False
help='This relation can be set up with the same partner left and right'
string='Reflexive'
contact_type_left
Selection
selection='get_partner_types'
string='Left partner type'
contact_type_right
Selection
selection='get_partner_types'
string='Right partner type'
handle_invalid_onchange
Selection
default='restrict'
help='When adding relations criteria like partner type and category are checked.\nHowever when you change the criteria, there might be relations that do not fit the new criteria.\nSpecify how this situation should be handled.'
required=True
selection=HANDLE_INVALID_ONCHANGE
string='Invalid relation handling'
is_symmetric
Boolean
default=False
help='This relation is the same from right to left as from left to right'
string='Symmetric'
name
Char
required=True
string='Name'
translate=True
name_inverse
Char
required=True
string='Inverse name'
translate=True
partner_category_left
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Left partner category'
partner_category_right
Many2one → res.partner.category
comodel_name='res.partner.category'
string='Right partner category'
check_existing(self, vals)
get_partner_types(self)
onchange_is_symmetric(self)
write(self, vals)
allow_self
Boolean
string='Reflexive'
contact_type_other
Selection
selection=ResPartnerRelationType.get_partner_types.im_func
string="Other record's partner type"
contact_type_this
Selection
selection=ResPartnerRelationType.get_partner_types.im_func
string="Current record's partner type"
is_inverse
Boolean
help='Inverse relations are from right to left partner.'
string='Is reverse type?'
is_symmetric
Boolean
string='Symmetric'
name
Char
partner_category_other
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Other record's category"
partner_category_this
Many2one → res.partner.category
comodel_name='res.partner.category'
string="Current record's category"
type_id
Many2one → res.partner.relation.type
comodel_name='res.partner.relation.type'
string='Type'
name_get(self)
name_search(self, name='', args=None, operator='ilike', limit=100)