Search code examples
odoomany-to-manyprojectodoo-10

How to add several partners to the project.project model?


I need to have more then one partner of a project in project form. Thats what I've tried:

class project(models.Model):
    _inherit = 'project.project'
    partner_id = fields.Many2many('res.partner',
        string='Customer',
        default=_get_default_partner)

Install failed with error "unknown function _get_default_partner". Allthrough the function exists in inherited model project.project.

The second version makes no change. After isttallation I went to Settings > database > modules > project > project.project and saw the partner_id is still many2one:

class project(models.Model):
    _inherit = 'project.project'
    partner_id = fields.Many2many('res.partner',
        string='Customer')

Solution

  • You can use a lambda function to assign the default value like this:

    partner_id = fields.Char(
        string='Customer',
        default=lambda self: self._get_default_partner(),
    )
    
    @api.model
    def _get_default_partner(self):
    
        # override the original method
    

    Actually, you should create another different many2many field. Instead of trying to convert the many2one to a many2many field. So I would do something like this:

    class ProjectProject(models.Model):
        _inherit = 'project.project'
    
        partner_id = fields.Many2one(
            invisible=True
        )
    
        partner_ids = fields.Many2many(
            string='Customer',
            comodel_name='res.partner',
            default=lambda self: self._get_default_partner_ids(),
        )
    
        @api.model
        def _get_default_partner_ids(self):
    
            # [...]