TIP: You can type at any time to perform a new search.
Partner relations
partner_relations · OCA/partner-contact
Security findings
Migration considerations
- Imports from the old `openerp` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp.osv.expression` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp.exceptions` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp.osv.expression` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp.tools` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp.tools` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- Imports from the old `openerp.exceptions` namespace: renamed to `odoo` since Odoo 10.0. migration-openerp-import · source
- For a target of Odoo 10.0+: use the `__manifest__.py` manifest name instead of `__openerp__.py`. The filename alone does not establish module age or compatibility. migration-openerp-manifest · source
form_res_partner_relation_type— For a target of Odoo 17.0+: view 'form_res_partner_relation_type' uses `attrs=`/`states=`, which are no longer supported. Convert modifiers to direct Python boolean expressions in `invisible`/`readonly`/`required`; preserve the original AND/OR logic. migration-view-attrs-states · sourcetree_res_partner_relation_all— View 'tree_res_partner_relation_all' is defined with a `<tree>` root tag: renamed to `<list>` in Odoo 18.0. migration-view-tree-tag · sourcetree_res_partner_relation_type— View 'tree_res_partner_relation_type' is defined with a `<tree>` root tag: renamed to `<list>` in Odoo 18.0. migration-view-tree-tag · source
Migration review checklist, not a compatibility verdict. No target version is selected: apply version-specific advice only when migrating to that version or later.
- Repository
- OCA/partner-contact · module folder · Try on Runboat
- Module version
- 1.1.2
- Category
- Customer Relationship Management
- Folder size
- 0.26 MB
- License
- AGPL-3
- Application
- No
- Auto-installable
- No
- Website
- None
- Last tracking update
- 2026-08-07 07:03:08
- Authors
- Camptocamp, Odoo Community Association (OCA), Therp BV
- Maintainers
- Camptocamp, Odoo Community Association (OCA), Therp BV
- Committers
- Yannick Vaucher, eLBati, Stéphane Bidoul, Sandy Carter, Holger Brunn, Pedro M. Baeza, Fekete Mihai, Stéphane Bidoul (ACSONE), Weblate, luc-demeyer, OCA Transbot, Charbel Jacquin, oca-travis, Antonio Espinosa, Jonathan Nemry (ACSONE)
- Odoo dependencies
-
odoo/odoo:- base
- Python dependencies
- None
- System dependencies
- None
- Required by
- None
- Description
Code Analysis
Views touched (6)
| 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_relations.view_partner_form | res.partner | form | Inherits base.view_partner_form |
view_res_partner_filter |
partner_relations.view_partner_filter | res.partner | Inherits base.view_res_partner_filter |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (5)
New fields (6)
-
relation_all_idsOne2many → res.partner.relation.allauto_join=Truecomodel_name='res.partner.relation.all'copy=Falseinverse_name='this_partner_id'selectable=Falsestring='All relations with current partner' -
relation_countIntegercompute='_compute_relation_count'string='Relation Count' -
search_relation_dateDatecompute=<expr>search='_search_relation_date'string='Relation valid' -
search_relation_partner_category_idMany2one → res.partner.categorycomodel_name='res.partner.category'compute=<expr>search='_search_related_partner_category_id'string='Has relation with a partner in category' -
search_relation_partner_idMany2one → res.partnercomodel_name='res.partner'compute=<expr>search='_search_related_partner_id'string='Has relation with' -
search_relation_type_idMany2one → res.partner.relation.type.selectioncomodel_name='res.partner.relation.type.selection'compute=<expr>search='_search_relation_type_id'string='Has relation of type'
-
get_partner_type(self)@api.multiGet partner type for relation. :return: 'c' for company or 'p' for person :rtype: str -
search(self, args, offset=0, limit=None, order=None, count=False)@api.modelInject searching for current relation date if we search for relation properties and no explicit date was given.
New fields (5)
-
date_endDateargs: 'Ending date' -
date_startDateargs: 'Starting date' -
left_partner_idMany2one → res.partnerauto_join=Truecomodel_name='res.partner'ondelete='cascade'required=Truestring='Source Partner' -
right_partner_idMany2one → res.partnerauto_join=Truecomodel_name='res.partner'ondelete='cascade'required=Truestring='Destination Partner' -
type_idMany2one → res.partner.relation.typeauto_join=Truecomodel_name='res.partner.relation.type'required=Truestring='Type'
-
create(self, vals)@api.modelOverride create to correct values, before being stored.
New fields (9)
-
activeBooleanhelp='Records with date_end in the past are inactive'string='Active' -
any_partner_idMany2many → res.partnercomodel_name='res.partner'compute=<expr>search='_search_any_partner_id'string='Partner' -
date_endDateargs: 'Ending date' -
date_startDateargs: 'Starting date' -
other_partner_idMany2one → res.partnercomodel_name='res.partner'required=Truestring='Other Partner' -
record_typeSelectionreadonly=Trueselection=_RECORD_TYPESstring='Record Type' -
relation_idMany2one → res.partner.relationcomodel_name='res.partner.relation'readonly=Truestring='Relation' -
this_partner_idMany2one → res.partnercomodel_name='res.partner'required=Truestring='One Partner' -
type_selection_idMany2one → res.partner.relation.type.selectioncomodel_name='res.partner.relation.type.selection'required=Truestring='Relation Type'
-
create(self, vals)@api.modelDivert non-problematic creates to underlying table. Create a res.partner.relation but return the converted id. -
name_get(self)@api.multi -
onchange_partner_id(self)@api.onchange('this_partner_id', 'other_partner_id')Set domain on type_selection_id based on partner(s) selected. -
onchange_type_selection_id(self)@api.onchange('type_selection_id')Add domain on partners according to category and contact_type. -
unlink(self)@api.multidivert non-problematic creates to underlying table -
write(self, vals)@api.multidivert non-problematic writes to underlying table
New fields (9)
-
allow_selfBooleandefault=Falsehelp='This relation can be set up with the same partner left and right'string='Reflexive' -
contact_type_leftSelectionselection='get_partner_types'string='Left partner type' -
contact_type_rightSelectionselection='get_partner_types'string='Right partner type' -
handle_invalid_onchangeSelectiondefault='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=Trueselection=HANDLE_INVALID_ONCHANGEstring='Invalid relation handling' -
is_symmetricBooleandefault=Falsehelp='This relation is the same from right to left as from left to right'old_name='symmetric'string='Symmetric' -
nameCharrequired=Truestring='Name'translate=True -
name_inverseCharrequired=Truestring='Inverse name'translate=True -
partner_category_leftMany2one → res.partner.categorycomodel_name='res.partner.category'string='Left partner category' -
partner_category_rightMany2one → res.partner.categorycomodel_name='res.partner.category'string='Right partner category'
-
check_existing(self, vals)@api.multiCheck wether records exist that do not fit new criteria. -
get_partner_types(self)@api.modelA partner can be an organisation or an individual. -
onchange_is_symmetric(self)@api.onchange('is_symmetric')Set right side to left side if symmetric. -
write(self, vals)@api.multiHandle existing relations if conditions change.
New fields (9)
-
allow_selfBooleanstring='Reflexive' -
contact_type_otherSelectionselection=ResPartnerRelationType.get_partner_types.im_funcstring="Other record's partner type" -
contact_type_thisSelectionselection=ResPartnerRelationType.get_partner_types.im_funcstring="Current record's partner type" -
is_inverseBooleanhelp='Inverse relations are from right to left partner.'string='Is reverse type?' -
is_symmetricBooleanstring='Symmetric' -
nameCharargs: 'Name' -
partner_category_otherMany2one → res.partner.categorycomodel_name='res.partner.category'string="Other record's category" -
partner_category_thisMany2one → res.partner.categorycomodel_name='res.partner.category'string="Current record's category" -
type_idMany2one → res.partner.relation.typecomodel_name='res.partner.relation.type'string='Type'
-
name_get(self)@api.multiGet name or name_inverse from underlying model. -
name_search(self, name='', args=None, operator='ilike', limit=100)@api.modelSearch for name or inverse name in underlying model.
Loading…