One2many поле выпуска Odoo 10.0
У меня очень странная проблема с полем 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 раза сначала в case 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 НА УРОВНЕ ЖАТКИ ЗАКАЗА НА ПРОДАЖУ
Я попытался отладить себя, но не смог найти причину, по которой это происходит.