Hi,
You can use the following code to compute the child contacts of the selected partner.
Python
class ProjectProject(models.Model):
"""
Inherits the project.project model to associate a customer (partner)
with its related contacts. Adds functionality to dynamically filter
customer contacts based on the selected partner.
"""
_inherit = 'project.project'
partner_id = fields.Many2one('res.partner', string="Partner")
partner_contacts_ids = fields.Many2many(
'res.partner', string="Partner Contacts", column1="partner_id",
column2="contact_id", compute="_compute_partner_contacts_ids")
customer_contacts = fields.Many2many(
'res.partner', string="Customer Contacts",
domain="[('id', 'in', partner_contacts_ids)]")
@api.depends('partner_id')
def _compute_partner_contacts_ids(self):
"""Compute the child contacts of the selected partner (customer) and
assign them to the partner_contacts_ids field."""
for rec in self:
rec.partner_contacts_ids = rec.partner_id.child_ids
XML
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="edit_project" model="ir.ui.view">
<field name="name">project.project.view.form</field>
<field name="model">project.project</field>
<field name="inherit_id" ref="project.edit_project"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='user_id']" position="after">
<field name="partner_id"/>
<field name="partner_contacts_ids" invisible="1" widget="many2many_tags"/>
<field name="customer_contacts" widget="many2many_tags"/>
</xpath>
</field>
</record>
</odoo>
Hope it helps