One2one поле в odoo

Odoo ORM не поддерживает поля `` One2one``, но вы можете сделать их вручную. В приведенном ниже примере мы устанавливаем связь one2one между моделями `` fleet.vehicle`` и `` account.asset.asset``.

In short, you set normal Many2one field (vehicle_id in the example) in a one model (doesn’t really matter which of the models you choose) and corresponding One2many field (asset_ids in the example) in another model. Then we add virtual Many2one field (asset_id in the example) with attributes compute and inverse.

class Fleet(models.Model):

_inherit = 'fleet.vehicle'
...
asset_id = fields.Many2one('account.asset.asset', compute='compute_asset', inverse='asset_inverse')
asset_ids = fields.One2many('account.asset.asset', 'vehicle_id')

@api.one
@api.depends('asset_ids')
def compute_asset(self):
    if len(self.asset_ids) > 0:
        self.asset_id = self.asset_ids[0]

@api.one
def asset_inverse(self):
    if len(self.asset_ids) > 0:
        # delete previous reference
        asset = self.env['account.asset.asset'].browse(self.asset_ids[0].id)
        asset.vehicle_id = False
    # set new reference
    self.asset_id.vehicle_id = self


class Asset(models.Model):
_inherit = 'account.asset.asset'

vehicle_id = fields.Many2one('fleet.vehicle', string='Vehicle')

TODO: заменить `` @ api.one`` на `` @ api.multi``