2015-04-26 3 views
1

Я просто создаю модуль. После добавления значений и возникла проблема IndexError: индекс назначения списка вне диапазона. Как это исправить. Re Редактировать код, пожалуйста. Вот мой код:Odoo IndexError: индекс назначения списка за пределами допустимого диапазона

class calculator(osv.osv): 
    _name = 'calculator.calculator' 
    def get_total(self, cr, uid, ids, field_name, arg, context): 
      res = [] 
      perfos = self.browse(cr, uid, ids, context) 
      for perfo in perfos: 
       res[perfo.id] = perfo.p + perfo.b 
      return res 
    _columns = { 
     'p':fields.selection(((1,'Outstanding'), (2,'Well Above Expectations'), (3,'As Expected'), (4,'Below Expectations'), (5,'VeryPoor'), (0,'N/A')),'title'), 
     'b':fields.selection(((1,'Outstanding'), (2,'Well Above Expectations'), (3,'As Expected'), (4,'Below Expectations'), (5,'Very Poor'), (0,'N/A')),'title'), 
     'total' : fields.function(get_total, method=True, string='Total Mark'), 
    } 

ответ

2

Вы должны вернуть словарь словарь для функциональных полей. Вы определили res как список и попытались назначить его в качестве словаря. res[perfo.id] рассматривается как список и значение индекса perfo.id не найдено в списке res. Об этом говорит ошибка. Теперь код будет

class calculator(osv.osv): 
    _name = 'calculator.calculator' 

    def get_total(self, cr, uid, ids, field_name, arg, context): 
     res = {} 
     for perfos in self.browse(cr, uid, ids, context): 
      res[perfos.id] = perfos.p + perfos.b 
     return res 

    _columns = { 
     'p':fields.selection(((1,'Outstanding'), (2,'Well Above Expectations'), (3,'As Expected'), (4,'Below Expectations'), (5,'VeryPoor'), (0,'N/A')),'title'), 
     'b':fields.selection(((1,'Outstanding'), (2,'Well Above Expectations'), (3,'As Expected'), (4,'Below Expectations'), (5,'Very Poor'), (0,'N/A')),'title'), 
     'total' : fields.function(get_total, method=True, string='Total Mark'), 
    } 

Для приведенного выше кода вы, вероятно, получите это ошибка JS Error: [_.sprintf] expecting number but found string

Я не понимаю точку сложения двух полей выбора. Ключ будет добавлен как 1 + 1 в формате Юникода.

Этот следующий код предоставит вам основную идею функциональных полей.

class calculator(osv.osv): 
    _name = 'calculator.calculator' 

    def get_total(self, cr, uid, ids, field_name, arg, context): 
     res = {} 
     for perfos in self.browse(cr, uid, ids, context): 
      res[perfos.id] = perfos.p + perfos.b 
     return res 

    _columns = { 
     'p':fields.integer('A'), 
     'b':fields.integer('B'), 
     'total' : fields.function(get_total, method=True, string='Total Mark'), 
     } 

Вам может понадобиться, чтобы посмотреть на How to set store trigger for computed fields in Odoo 8?

Function field is not working in OpenERP

+0

Спасибо. Работал. – nikolas

+0

Как я могу дать значение p в калькуляторе/p в значении формы? Теперь это выглядит как калькулятор/калькулятор. Калькулятор, 12 – nikolas

+0

Возможно, вам придется посмотреть http://dirtyhandsphp.blogspot.in/2014/09/odooopenerp-recname-and-nameget.html –

Смежные вопросы