Odoo 防止在 One2many 字段中选择重复记录
Posted
技术标签:
【中文标题】Odoo 防止在 One2many 字段中选择重复记录【英文标题】:Odoo Prevent Selected Duplicate Record in One2many Field 【发布时间】:2022-01-22 20:41:41 【问题描述】:我想阻止所选记录再次显示在组合框中。
如您所见,710 - Maleo
在我之前选择该记录后再次显示。
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')
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)
更新
由于One2many
字段的模型类只有一个字段room_id
,因此我只需将One2many
字段更改为Many2many
。因为默认Many2many
字段防止重复记录。
但是如果我使用One2many
字段,我仍然想知道如何防止重复记录,以防我在One2many
的模型类中有多个字段。
【问题讨论】:
【参考方案1】:我认为这与您想要的情况相同。
我已经修改了销售订单,所以当销售订单行中的产品已经被选中时,该产品将不会再次显示在所选产品中。
我用odoo-14,继承sales.order.line,修改函数product_id_change()变成:
@api.onchange('product_id')
def product_id_change(self):
values = super(SaleOrderLine, self).product_id_change()
filter_product_ids = [data.product_id.id for data in self.order_id.order_line]
if values is None:
values =
values['domain'] = 'product_id' : [('id', 'not in', filter_product_ids)]
return values
【讨论】:
这不起作用:(以上是关于Odoo 防止在 One2many 字段中选择重复记录的主要内容,如果未能解决你的问题,请参考以下文章
如何在 set_values 方法 odoo 14 中保存 one2many 字段
Odoo:如何显示 one2many 字段中的 many2one 字段的字段