2016-10-11 6 views
3

У меня есть волшебник, в котором есть одно много поле. Я сделал кнопку в каждой строке одного, которое вызывает другого мастера, сделанного мной. Этот мастер предназначен для изменения некоторых значений выбранной строки.Как вызвать мастера из другого мастера в Odoo8?

Моя цель - вернуть первый мастер с новыми изменениями при нажатии на кнопку Применить к моему волшебнику.

Пример:

Первый мастер имеет one2many поле с тремя записями:

  • продукта A | 1 ud | Местоположение источника X | Место назначения Y | Lot A1
  • Продукт B | 2 ud | Местоположение источника X | Место назначения Y | Lot B1
  • Продукт C | 3 ud | Местоположение источника X | Место назначения Y | Lot C1

Теперь я нажимаю на кнопку первой строки, которую я сделал (каждая строка имеет один), и мой мастер открыт. Здесь я могу изменить партию первой строки ( с продуктом A). Представьте, что я установил Lot A0 и нажмите Применить.

Я должен вернуться к родительскому мастере и увидеть те же данные, кроме внесенных изменений. Таким образом, результат будет:

  • Продукт A | 1 ud | Местоположение источника X | Место назначения Y | Lot A0
  • Продукт B | 2 ud | Местоположение источника X | Место назначения Y | Lot B1
  • Продукт C | 3 ud | Местоположение источника X | Место назначения Y | Lot C1

Кто-нибудь знает, как достичь этого? Как я могу сохранить первые данные мастера?

+0

Как открыть мастер «линии» с помощью кнопки: путем возврата словаря действия? Если это так, просто верните родительский мастер в качестве словаря действий (цель «новый»), нажав «Применить», что должно быть кнопкой типа «объект», как и другая кнопка. – CZoellner

+0

Есть ли отзывы по данному вопросу? –

ответ

1

Сначала вам нужно просмотреть текущую запись мастера и его линию. После этого напишите значение по своему усмотрению.

Возврат текущего идентификатора с помощью объекта-мастера.

Попробовать следующий трюк:

#apply button method logic 
def apply_data(self, cr, uid, ids, context=None): 
    if not context: 
     context = {} 

    ctx = context.copy() 
    for wizard in self.browse(cr, uid, ids[0], context=context): 
     for line in wizard.one2many_field: 
      line.write({ 
       'field_name': field_value 
      }) 

    dummy, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'module_name', 'wizard_form_view_name') 
    return { 
     'name':_("Name of your Wizard"), 
     'view_mode': 'form', 
     'view_id': view_id, 
     'view_type': 'form', 
     'res_id': ids and ids[0] or False, 
     'res_model': 'wizard.object.name', 
     'type': 'ir.actions.act_window', 
     'nodestroy': True, 
     'target': 'new', 
     'context': ctx 
    } 

Примечание:

Вы также можете обновить значение контекста, а также.

Применить тип кнопки должен быть объектом для выполнения логики метода.

+0

Спасибо! Я предполагаю, что 'apply_data' должен быть методом, вызванным с помощью кнопки * Apply *, сделанной в моем обычном мастере. Но в этом обычном мастере нет поля One2many. Поле One2many находится в «родительском» мастере. – forvas