Как сделать ограничение Many2One в odoo 10

Я работаю с Odoo 10, и я пытаюсь изменить модуль флота, как на следующем изображении

модуль флота

Нам нужно, чтобы поле "Проводник" (Водитель) было уникальным, я имею в виду, что для транспортного средства может быть назначен только один водитель, и водителю не может быть назначено более одного транспортного средства.

Я использовал этот код:

@api.constrains('driver_id')
    def _check_driver(self):
        for record in self:
            if record.driver_id in self:
                raise ValidationError("Driver already has a vehicle assigned")

но этот код не работает. Как я могу решить это?

2 ответа

Решение

Вы можете применить фильтр домена в определении поля следующим образом

#definition on the fleet.vehicle model
driver_id = fields.Many2one('res.partner', index=True, required=True,
    ondelete='cascade', domain=[('vehicle_id', '=', False)])

#definition on the res.partner model
vehicle_id = fields.One2many('fleet.vehicle', 'driver_id')

или как следующее:

@api.constrains('driver_id')
def _check_driver(self):
    FleetVehicle = self.env['fleet.vehicle']
    for record in self:
        if record.driver_id in self:
            vehicle_count = FleetVehicle.search_count(['driver_id', '=', record.driver_id])
            if vehicle_count > 0:
                raise ValidationError("Driver already has a vehicle assigned")
_sql_constraints = [
        ('driver_unique', 'UNIQUE(driver_id, )',
         'The Driver has been already assigned to a vehicle !'),
    ]
Другие вопросы по тегам