python - Odoo:动态域过滤结果仅一次
问题描述
我正在尝试many2one
使用onchange
函数将域动态传递给字段。它设法检索所需的结果(根据需要过滤结果),但它只执行一次。换句话说,该onchange
函数成功地仅根据第一个选择过滤结果,并且任何先前的选择似乎都不会影响域过滤。
代码:
class ReturnProduct(models.Model):
_name = 'custom.return.product'
sale_id = fields.Many2one(comodel_name="custom.sale", string="Invoice #", required=False, )
return_line_ids = fields.One2many("custom.return.line", "return_product_id", string="Products")
class ReturnLine(models.Model):
_name = "custom.return.line"
return_product_id = fields.Many2one("custom.return.product", string="Return Reference")
sale_line_id = fields.Many2one("custom.sale.line", string="Product")
reason = fields.Text(String="Return Reason")
@api.onchange('return_product_id')
def onchange_product_id(self):
domain = {}
sale_line_ids = []
if self._context.get('sale_id'):
sale_id = self.env["custom.sale"].browse(self._context.get('sale_id'))
for sale_line in sale_id.product_ids.ids:
sale_line_ids.append(sale_line)
domain = {'sale_line_id': [('id', 'in', sale_line_ids)]}
return {'domain': domain}
解决方案
我认为您需要根据销售线中的产品在退货向导中过滤产品。您需要销售线中的产品出现在退货产品线中
为此,您可以执行以下操作
@api.onchange('return_product_id')
def onchange_product_id(self):
domain = {}
product_ids = []
if self._context.get('sale_id'):
sale_id = self.env["custom.sale"].browse(self._context.get('sale_id'))
for sale_line in sale_id.product_ids:
product_ids.append(sale_line)
domain = {'return_product_id': [('id', 'in', product_ids)]}
return {'domain': domain}
所以实际上你想为产品设置域。
推荐阅读
- c# - 使用 mvvm 在 WPF 数据网格中的行单击事件
- c# - C# 字符串数组元素不更新
- java - 如何在 hql 请求中正确调用枚举方法?numberClass 和 symbolClass 是一个枚举
- java - 在 Java 中生成 XML 有效负载的最有效方法
- java - Android ListAdapter.getItemCount() 总是返回 0
- javascript - 获取用户在 EJS 中选择的表详细信息?
- javascript - cookie 何时被视为第三方 cookie?
- sql - 编写查询以查找从 10 月到 11 月因购买而产生的收入变化
- r - Datatable 显示 empy selectInput 而默认选择值
- c# - LinqToSql 等价于 IN