Как создать записи на другой модели, сделав метод onchange? - PullRequest
2 голосов
/ 01 февраля 2020

Надеюсь, у тебя все хорошо. Мне нужна небольшая одолжение от тебя. Я сделал функцию на метод обмена. Я хочу, если я заменю поле iefinal_unique_id, то оно создаст модель, которая находится в другом модуле. Но он не работает над изменением поля. Он работает над обновлением страницы и сохранением формы. Пожалуйста, помогите мне.

@api.multi    
@api.onchange('final_unique_id')    
def finish_serial_no(self):
             vals = {
                       'name': self.production_id.name,
                       'work_order_id':self._origin.id,
                       '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',
                   }
                   res = self.env['info.module'].create(vals)

1 Ответ

0 голосов
/ 02 февраля 2020

То, что вы пытаетесь сделать, неправильно, вы создаете запись в '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, поскольку пользователь всегда может нажать кнопку сбросить . Я надеюсь, что это поможет вам

...