You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo中Many2One字段域筛选失效问题求助

解决Odoo中Many2One字段域筛选不生效的问题

我来帮你排查这个问题,看了你的代码后,发现核心问题出在PlanificacionFactura模型的state字段定义上——你把它设为了一个不存储的计算字段,而Odoo的域筛选(domain)是基于数据库存储的字段值来工作的,这就导致你的筛选条件无法生效。

问题原因详解

你的state字段是通过compute='_compute_state'计算得到的,但默认情况下Odoo的计算字段不会把结果存储到数据库中(store=False是默认值)。当你在PagoParcialFactura的factura_id字段设置域[('state','in',['creado','pendiente'])]时,Odoo会尝试在数据库中查询state字段符合条件的记录,但因为这个字段没有存储,数据库里根本没有这个值,所以筛选自然不起作用。

解决方案:给计算字段添加存储属性

只需要修改PlanificacionFactura模型中state字段的定义,加上store=True参数,让计算后的状态值持久化到数据库中,这样域筛选就能正常工作了。

修改后的state字段代码如下:

state = fields.Selection([
    ('creado', 'Creada'),
    ('pendiente','Pagada parcialmente'),
    ('pagado','Pagada')
], string='Estado', default='creado', compute='_compute_state', store=True )

额外注意事项

  • 确保_compute_state方法的依赖字段正确:你的depends('pago_acumulado','monto_total')已经覆盖了影响状态变化的关键字段,当这两个字段的值变化时,state会自动重新计算并更新到数据库。
  • 视图中的域可以保留或移除:你在视图里也设置了相同的域,这和模型层面的域不冲突,但模型层面的域会作为默认筛选,视图的域会叠加或覆盖(这里是相同条件,所以效果一致)。
  • 更新模块并验证:修改代码后,记得升级你的Odoo模块,然后创建或修改账单记录,让state字段的值被存储到数据库,之后再打开部分付款的表单,就能看到factura_id下拉框只显示状态为creado和pendiente的账单了。

内容的提问来源于stack exchange,提问作者Ernesto Ruiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:07:44