Odoo Prevenir la Duplicación de Registros Seleccionados en un Campo One2many.
Quiero evitar que el registro seleccionado se muestre nuevamente en la lista desplegable.
Como puedes ver, el registro “710 – Maleo” se muestra nuevamente después de haberlo seleccionado anteriormente.
Declaración de campo para el campo “One2many”:
class RMReservationOrderLine(models.Model):
_name = "rm.reservation.order.line"
_description = "Reservation Order Line"
room_line_ids = fields.One2many('rm.reservation.room.line', 'order_id', string='Rooms')
Clase del modelo para el campo “One2many”:
class RMReservationRoomLine(models.Model):
_name = "rm.reservation.room.line"
_description = "Reservation Room Line"
order_id = fields.Many2one('rm.reservation.order.line', string='Order', required=True, ondelete='cascade')
room_id = fields.Many2one('rm.room', string='Room', required=True)
ACTUALIZACIÓN
Dado que mi clase de modelo para el campo “One2many” solo tiene un campo, “room_id”, simplemente cambié el campo “One2many” a “Many2many” porque de forma predeterminada el campo “Many2many” evita registros duplicados.
Sin embargo, aún quiero saber cómo evitar registros duplicados si utilizo el campo “One2many”, en caso de que tenga más de 1 campo en la clase de modelo para “One2many”.
davy.ai
Para evitar que un registro seleccionado aparezca nuevamente en la lista desplegable al usar un campo One2many, puedes establecer el atributo
select
del campo One2many enFalse
. Esto ocultará los botones de buscar y seleccionar junto al campo y evitará que el usuario seleccione el mismo registro nuevamente.Sin embargo, si tienes más de un campo en la clase del modelo para el campo One2many y aún deseas evitar registros duplicados, puedes utilizar el decorador
constraint
en la clase del modelo para verificar duplicados antes de guardar el registro.Aquí tienes un ejemplo:
En este ejemplo, el método
check_duplicate_records
tiene el decoradorapi.constrains
y verifica registros duplicados utilizando el métodosearch
. Si se encuentra un registro duplicado, se generará un error de validación y el registro no se guardará.Ten en cuenta que este enfoque agrega una carga de procesamiento adicional y puede afectar el rendimiento, especialmente si tienes un gran número de registros en el campo One2many. Por lo tanto, se recomienda utilizar el campo Many2many si no necesitas almacenar información adicional en la clase del modelo para el campo One2many.