2016-10-28 1 views
2

У меня есть этот код на мой Odoo модуль v8:NotImplementedError: «обновление» не поддерживается на frozendict - Odoo v8

@api.multi 
def button_generate_wh_doc(self): 
    context = self._context 
    partner = self.env['res.partner'] 
    res = {} 
    for inv in self: 
     view_id = self.env['ir.ui.view'].search([ 
      ('name', '=', 'account.invoice.wh.iva.customer')]) 
     context.update({ 
      'invoice_id': inv.id, 
      'type': inv.type, 
      'default_partner_id': partner._find_accounting_partner(
       inv.partner_id).id, 
      'default_name': inv.name or inv.number, 
      'view_id': view_id, 
     }) 
     res = { 
      'name': _('Withholding vat customer'), 
      'type': 'ir.actions.act_window', 
      'res_model': 'account.wh.iva', 
      'view_type': 'form', 
      'view_id': False, 
      'view_mode': 'form', 
      'nodestroy': True, 
      'target': 'current', 
      'domain': "[('type', '=', '" + inv.type + "')]", 
      'context': context 
     } 
    return res 

Это кнопка действия, но когда я нажимаю его он бросает мне:

File "/home/user/odoov8/odoo-venezuela/l10n_ve_withholding_iva/model/invoice.py", line 427, in button_generate_wh_doc 
'view_id': view_id, 
File "/home/user/odoov8/odoo-8.0-20161017/openerp/tools/misc.py", line 1280, in update 
raise NotImplementedError("'update' not supported on frozendict") 
NotImplementedError: 'update' not supported on frozendict 

Неужели кто-нибудь сталкивается с такой ошибкой, реализующей это?

Я думаю, что это связано с порядком, в котором вызван контекст, но Im не совсем уверен.

ответ

4

Чтобы обновить контекст, попробуйте это.

context = self.env.context.copy() 
context.update({'domain':[('something','=','something')]}) 

Теперь используйте это как свою переменную контекста.

+1

Ваш ответ технически корректен, но вы должны использовать with_context() как первый вариант, например, в ответе @ shodowsjedi. – CZoellner

5

уверен, что вы можете скопировать контекст и использовать способ, который вам нравится, но когда вы скопируете forezedict, он даст новый диктующий текущий контекст, скорее я посоветую использовать методы with_context.

self.with_context(key=value,key=value) 

Это обновит текущий контекст среды и будет двигаться вперед автоматически.

+0

И как обновить request.env.context в контроллере odoo? –