То, что вы пытаетесь сделать, неправильно, вы создаете запись в 'info.module'
, которая имеет many2one work_order_id
для текущей модели, вам необходимо знать перед сохранением записи, идентификатор является экземпляром NewId
witch - это фиктивный класс, поэтому, когда вы создаете запись, она не будет прикреплена к текущей записи, потому что она еще не сохранена, у нее нет ID (self._origin.id
, хотя создание записи не будет работать, это только если он сохранен)
вы говорите, что он создает запись после сохранения и обновления страницы. Я предполагаю, что у вас есть поле one2many
до 'info.module'
[если у вас нет создайте его, если вам не нужно, чтобы пользователь видел его, просто спрячьте его в представлении] , давайте предположим, что оно называется info_module_id
:
@api.onchange('final_unique_id')
def finish_serial_no(self):
vals = {
'name': self.production_id.name,
# 'work_order_id':self._origin.id, this will be handled by the one2many when you save the record
'product_id': self.product_id.id,
'unique_number': self.final_unique_id,
'date': datetime.datetime.now(),
'info_date': datetime.datetime.now(),
'user': self.env.user.id,
'status': 'Done',
}
# Use `new` instead of create this will create the record but doesn't save it in database.
self.ifo_module_id |= self.env['info.module'].new(vals) # add the record to one2many using `|` operator
Не рекомендуется создавать запись методом onchange
, поскольку пользователь всегда может нажать кнопку сбросить . Я надеюсь, что это поможет вам