我对 One2many 字段有这个非常奇怪的问题。首先让我解释一下场景......
我有一个 One2many 字段sale.order.line
,下面的代码将更好地解释结构
class testModule(models.Model):
_name = 'test.module'
name = fields.Char()
class testModule2(models.Model):
_name = 'test.module2'
location_id = fields.Many2one('test.module')
field1 = fields.Char()
field2 = fields.Many2one('sale.order.line')
class testModule3(models.Model):
_inherit = 'sale.order.line'
test_location = fields.One2many('test.module2', 'field2')
案例 1:
现在发生的事情是,当我创建一个新的销售订单时,我选择partner_id
然后添加一个sale.order.line
并在这一行内添加 One2many 字段test_location
,然后我保存。
案例2:
新建销售订单,选择partner_id
然后添加sale.order.line
,在sale.order.line
添加test_location
行里面【关闭销售订单行窗口】。现在在点击保存之前的条目之后,我更改了一个字段partner_id
,然后单击保存。
案例 3:此案例与案例 2
相同,但另外我再次更改了partner_id
字段 [首先更改了案例 2,然后是现在,总共更改了 2 次],然后我点击保存。
结果
案例 1工作正常。
案例2有一个问题
odoo.sql_db: bad query: INSERT INTO "test_module2" ("id", "field2", "field1", "location_id", "create_uid", "write_uid", "create_date", "write_date") VALUES(nextval('test_module2_id_seq'), 27, 'asd', ARRAY[1, '1'], 1, 1, (now() at time zone 'UTC'), (now() at time zone 'UTC')) RETURNING id
ProgrammingError: column "location_id" is of type integer but expression is of type integer[]
LINE 1: ...VALUES(nextval('test_module2_id_seq'), 27, 'asd', ARRAY[1, '...
现在对于这种情况,我在创建/写入方法上放置了一个调试器,sale.order.line
以查看值是否被传递..
values = {u'product_uom': 1, u'sequence': 0, u'price_unit': 885, u'product_uom_qty': 1, u'qty_invoiced': 0, u'procurement_ids': [[5]], u'qty_delivered': 0, u'qty_to_invoice': 0, u'qty_delivered_updateable': False, u'customer_lead': 0, u'analytic_tag_ids': [[5]], u'state': u'draft', u'tax_id': [[5]], u'test_location': [[5], [0, 0, {u'field1': u'asd', u'location_id': [1, u'1']}]], 'order_id': 20, u'price_subtotal': 885, u'discount': 0, u'layout_category_id': False, u'product_id': 29, u'price_total': 885, u'invoice_status': u'no', u'name': u'[CARD] Graphics Card', u'invoice_lines': [[5]]}
在上面的值location_id
中被传递就像u'location_id': [1, u'1']}]]
不正确的那样......所以为此我更正代码中的问题并更新值并传递......
案例 3 ,如果用户更改字段 2 次或超过 2 次,则值为
values = {u'invoice_lines': [[5]], u'procurement_ids': [[5]], u'tax_id': [[5]], u'test_location': [[5], [1, 7, {u'field1': u'asd', u'location_id': False}]], u'analytic_tag_ids': [[5]]}
这里
u'location_id': False
多个案例
如果用户在同一记录上执行案例 1,则在同一记录上执行案例 2或案例 3,则有时该行将保存为field2 = Null or False
数据库中的其他值,例如location_id
并且field1
将有数据但没有field2
注意:这会发生在销售订单标题级别上的任何字段,而不仅仅是 PARTNER_ID 字段
我尝试自己调试,但找不到发生这种情况的原因。