'NoneType'对象不可迭代对于odoo 9中的选择字段

时间:2016-10-23 07:06:04

标签: python openerp

“错误”  文件“/home/tushar/odoo1/openerp/fields.py”,第1528行,在get_values中     返回[值的值,选择中的_]

TypeError:'NoneType'对象不可迭代

Stachtrace: Odoo服务器错误

Traceback (most recent call last):
  File "/home/tushar/odoo1/openerp/http.py", line 648, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/tushar/odoo1/openerp/http.py", line 685, in dispatch
    result = self._call_function(**self.params)
  File "/home/tushar/odoo1/openerp/http.py", line 321, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/home/tushar/odoo1/openerp/service/model.py", line 118, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/tushar/odoo1/openerp/http.py", line 314, in checked_call
    result = self.endpoint(*a, **kw)
  File "/home/tushar/odoo1/openerp/http.py", line 964, in __call__
    return self.method(*args, **kw)
  File "/home/tushar/odoo1/openerp/http.py", line 514, in response_wrap
    response = f(*args, **kw)
  File "/home/tushar/odoo1/addons/web/controllers/main.py", line 888, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/home/tushar/odoo1/addons/web/controllers/main.py", line 880, in _call_kw
    return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
  File "/home/tushar/odoo1/openerp/api.py", line 250, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/tushar/odoo1/openerp/api.py", line 381, in old_api
    result = method(recs, *args, **kwargs)
  File "/home/tushar/odoo1/openerp/models.py", line 6028, in onchange
    record = self.new(values)
  File "/home/tushar/odoo1/openerp/api.py", line 248, in wrapper
    return new_api(self, *args, **kwargs)
  File "/home/tushar/odoo1/openerp/models.py", line 5595, in new
    record._cache.update(record._convert_to_cache(values, update=True))
  File "/home/tushar/odoo1/openerp/models.py", line 5490, in _convert_to_cache
    for name, value in values.iteritems()
  File "/home/tushar/odoo1/openerp/models.py", line 5491, in <dictcomp>
    if name in fields
  File "/home/tushar/odoo1/openerp/fields.py", line 1533, in convert_to_cache
    if value in self.get_values(record.env):
  File "/home/tushar/odoo1/openerp/fields.py", line 1528, in get_values
    return [value for value, _ in selection]
TypeError: 'NoneType' object is not iterable

我在odoo中选择字段的动态选择时出现此错误。我提供了我已经完成的代码。请帮我解决这个问题

from  openerp import models, fields, api
from test.test_support import temp_cwd

class scantech_laser_product_template(models.Model):
    _name='product.template' 
    _inherit='product.template'

    values2=[('ECDS0','ECDS0'),('ECDS1','ECDS1'),('ECDS2','ECDS2')]    
    main_category = fields.Selection([('SL0','SL0'),('SL1','SL1'),('SL2','SL2')],string="Main Category")

    @api.multi 
    @api.depends("main_category")
    def _get_selection_name(self):
        if self.main_category == "SL0":
            return [("ESDS1","ESDS1")]  

    sub_category = fields.Selection(selection=_get_selection_name,string="Sub Category")

当我选择主要类别字段时,它显示错误

1 个答案:

答案 0 :(得分:0)

问题是当你的条件求值为false时你没有返回默认值(并且python中的函数/方法没有返回任何返回None)所以解决方法是做类似这样的事情

@api.multi 
@api.depends("main_category")
def _get_selection_name(self):
    if self.main_category == "SL0":
        return [("ESDS1","ESDS1")]

    return [("default", "Default")] # can be anything you want as the default value

或者您可以使您的选择字段具有默认值,这使得条件始终评估为true,并且无需_get_selection_name中的默认返回值

main_category = fields.Selection([('SL0','SL0'),('SL1','SL1'),('SL2','SL2')],string="Main Category", default="SLO")