Postgresql One2many现场发布Odoo 10.0

Postgresql One2many现场发布Odoo 10.0,postgresql,orm,odoo-9,odoo-10,one2many,Postgresql,Orm,Odoo 9,Odoo 10,One2many,我对One2many字段有一个非常奇怪的问题。 首先让我向你解释一下情况 我在sale.order.line中有一个One2many字段,下面的代码将更好地解释结构 class testModule(models.Model): _name = 'test.module' name = fields.Char() class testModule2(models.Model): _name = 'test.module2' location_id = fi

我对One2many字段有一个非常奇怪的问题。 首先让我向你解释一下情况

我在
sale.order.line
中有一个One2many字段,下面的代码将更好地解释结构

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: 现在发生的事情是,当我创建一个新的销售订单时,我选择
合作伙伴id
,然后添加一个
销售订单行
,在这一行中添加One2many字段
测试位置
,然后保存

案例2: 创建新的销售订单,选择
合作伙伴id
,然后添加
销售订单行
,并在
销售订单行
中添加
测试位置
行[关闭销售订单行窗口]。现在,在点击save之前输入后,我更改一个字段,说
partner\u id
,然后单击save

案例3: 此案例与案例2相同,但我再次更改了
partner\u id
字段[先更改案例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的create/write方法上放置了一个调试器,以查看这些值是如何传递的

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\u id
u'location\u 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]]}
这里

多个案例

如果用户执行案例1,则同一记录上的行执行案例2或案例3,则有时该行将保存为数据库中的
field2=Null或False
,其他值如
location\u id
field1
将有数据,但不包含
field2

注意:这发生在任何字段上,而不仅仅是销售订单标题级别的合作伙伴ID字段上

我试着调试自己,但找不到发生这种情况的原因

u'location_id': False