python - 如何在 Odoo 10 的 onchange 方法中向 One2many 字段添加一些新记录?
问题描述
我正在尝试通过onchange方法修改One2many字段。我需要的是添加一些记录,但在onchange计算之前保留一些现有的记录。
更准确地说,我有一个名为tax_line_ids
. 此字段存储税金。税有一个名为 的manual
字段Boolean
。
因此,每次字段my_field
更改时,我都需要向One2many字段添加新税,但我需要保留已设置为Truetax_line_ids
的旧税。manual
尝试A
@api.onchange('my_field')
def onchange_my_field(self):
new_tax_lines = []
tax_line_ids = self.tax_line_ids.filtered(
lambda r: r.manual).ids
# get_taxes_values returns a list of dictionaries with values
tax_grouped = self.get_taxes_values()
for tax in tax_grouped.values():
new_tax = self.env['account.invoice.tax'].create(tax)
tax_line_ids.append(new_tax.id)
self.tax_line_ids = [(6, 0, tax_line_ids)]
问题
onchange方法工作正常,但是当我单击保存按钮时,我的 onchange 方法引入的记录消失tax_line_ids
了(不是只读字段)。tax_line_ids
尝试 B
@api.onchange('my_field')
def onchange_my_field(self):
new_tax_lines = []
manual_tax_lines = self.tax_line_ids.filtered(
lambda r: r.manual)
for manual_tax_line in manual_tax_lines:
new_tax_lines.append(manual_tax_line.sudo().read()[0])
tax_grouped = self.get_taxes_values()
for tax in tax_grouped.values():
new_tax_lines.append((0, 0, tax))
self.tax_line_ids = new_tax_lines
问题
onchange方法第一次工作正常,即使我点击保存按钮(记录不会消失),但如果我my_field
在保存前第二次修改,我会收到安全访问错误(我正在与管理员合作):
(文件类型:account.invoice.tax,Operación:阅读)
这就是为什么我sudo()
在 之前添加的原因read()
,以防万一,但错误仍然存在。
结论
那么,在我的onchange方法中,如何将新记录添加到One2many字段中以保留一些现有记录?
解决方案
@api.onchange('my_field')
def onchange_my_field(self):
tax_line_ids = self.tax_line_ids.filtered(
lambda r: r.manual).ids
# get_taxes_values returns a list of dictionaries with values
tax_grouped = self.get_taxes_values()
new_tax_datas = []
for tax in tax_grouped.values():
new_tax_datas.append(tax)
self.tax_line_ids = [
(4, tl_id) for tl_id in tax_line_ids,
(0, 0, td) for td in new_tax_datas]
或者
@api.onchange('my_field')
def onchange_my_field(self):
new_tax_lines = []
tax_lines = self.tax_line_ids.filtered(
lambda r: r.manual)
# get_taxes_values returns a list of dictionaries with values
tax_grouped = self.get_taxes_values()
for tax in tax_grouped.values():
new_tax = self.env['account.invoice.tax'].create(tax)
tax_lines += new_tax
self.tax_line_ids = [(6, 0, tax_lines.ids)]
推荐阅读
- android - 如何正确设置 JSON 信息 [已解决]
- arrays - VBA如何获取变量的名称,然后将其传递给函数
- python - pandas groupby 添加切片元素
- spring-boot - OpenJDK 64 位服务器 VM 警告:由于启用了 JVMCI,因此强制 TieredStopAtLevel 进行全面优化
- c++ - Directshow:如何更改视频的大小和帧率?
- c - 在 Julia 基准测试教程中编译 C 代码
- json - 从字典列表中获取最新的日期字典
- javascript - regex - 忽略字符串开头的空格
- r - 如何使用 R 计算每年的记录
- javascript - JS/CSS 剪辑路径 - 如何计算圆的半径?