2013-07-28 70 views
4

我需要一个对象,这是purchase.order阅读领域,从另一个对象product.product 这个字段是一个选择类型字段,所以如果该字段已si被选中,那么做_get_product_available_func(('done'))这是product.productAttributeError的:“NoneType”对象有没有属性“得到” - Python的 - OpenERP的

这已经声明的函数是purchase.order

'sel_cert' : fields.selection([('si', 'Si'),('no','No')], 'Origen Certificado'), 

选择字段,这个功能应该从“检索”那场

def desc_cert(self, cr, uid, ids, field_name, field_args, context=None): 
    obj = self.pool.get('purchase.order') 
    pids = obj.search(cr, uid, [('sel_cert', '=', 'si')]) 
    val = self._get_product_available_func(('done')) 
    if pids == 'si': 
      return val 

具有_get_product_available_func(('done))

def _get_product_available_func(states, what): 
    def _product_available(self, cr, uid, ids, name, arg, context=None): 
     return {}.fromkeys(ids, 0.0) 
    return _product_available 

_product_qty_available = _get_product_available_func(('done',), ('in', 'out')) 
_product_certificado_qty = _get_product_available_func(('done',), ('in', 'out')) 
_product_virtual_available = _get_product_available_func(('confirmed','waiting','assigned','done'), ('in', 'out')) 
_product_outgoing_qty = _get_product_available_func(('confirmed','waiting','assigned'), ('out',)) 
_product_incoming_qty = _get_product_available_func(('confirmed','waiting','assigned'), ('in',)) 

这样的功能,我需要在product.product当现场sel_certpurchase.order具有值si到“执行” _get_product_available_func(('done')),但给我的错误,这里的在openerp服务器回溯:

Server Traceback (most recent call last): 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\openerp\addons\web\session.py", line 89, in send 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\.\openerp\netsvc.py", line 292, in dispatch_rpc 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\.\openerp\service\web_services.py", line 626, in dispatch 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\.\openerp\osv\osv.py", line 188, in execute_kw 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\.\openerp\osv\osv.py", line 131, in wrapper 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\.\openerp\osv\osv.py", line 197, in execute 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\.\openerp\osv\osv.py", line 185, in execute_cr 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\.\openerp\osv\orm.py", line 3604, in read 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\.\openerp\osv\orm.py", line 3724, in _read_flat 
File "C:\Program Files\OpenERP 7.0-20130726-231403\Server\server\.\openerp\osv\fields.py", line 1139, in get 
AttributeError: 'NoneType' object has no attribute 'get' 

也许我应该打电话给_product_qty_available而不是_get_product_available_func

有人可以澄清这一点?

在此先感谢!

+0

错误消息基本上说,你对某些你想要的方法(可能是字典)使用'get'方法,但结果只是'None'。你应该添加一些守卫到你的代码,检查你的变量是否真的是你认为他们是... – sjakobi

+0

嗯,我看到了,我现在要尝试你的答案,似乎是没有宣布的事情他们的方式应该是 – NeoVe

+0

第一个代码在产品菜单上显示'undefined',甚至无法访问它们,因为'pool'在当前对象中可能会覆盖(可能),然后我尝试了第二个代码,仍然得到属性错误,您说,也许这是从选择类型字段的'字典'?也许不是我期望的回报? – NeoVe

回答

2

更多的想法:

尝试此一次:

def desc_cert(self, cr, uid, ids, field_name, field_args, context=None): 
    obj = self.pool.get('purchase.order') 
    pids = obj.search(cr, uid, [('sel_cert', '=', 'si')]) 
    val = self._get_product_available_func(('done')) 
    if pids == 'si': 
      return val 
    return 10 

如果我们得到一个AttributeError: 'int' object has no attribute 'get',我们知道这个错误确实在这个函数的输出中。

另一个想法:

def desc_cert(self, cr, uid, ids, field_name, field_args, context=None): 
    obj = self.pool.get('purchase.order') 
    pids = obj.search(cr, uid, [('sel_cert', '=', 'si')]) 
    val = self._get_product_available_func(('done')) 
    if pids.lower() == 'si': 
      return val 

查阅PID可以是 “SI” 或 “SI”。

+0

哦,没有看到你的编辑,也要尝试一下,谢谢! – NeoVe

+0

确实在函数的输出中,会尝试其他想法 – NeoVe

+0

用'if pids.lower()=='si':'它给我'AttributeError:'list'对象没有属性'lower''也许,我认为这是我评论你的默认东西,明天会尝试一下,看看会发生什么,非常感谢你! – NeoVe

2

试试这个:

def desc_cert(self, cr, uid, ids, field_name, field_args, context=None): 
    obj = self.pool.get('purchase.order') 
    pids = obj.search(cr, uid, [('sel_cert', '=', 'si')]) 
    if pids == 'si': 
     val = self._get_product_available_func(('done')) 
     return val 

或者这样:

def desc_cert(self, cr, uid, ids, field_name, field_args, context=None): 
    if self.pool: 
     obj = self.pool.get('purchase.order') 
    pids = obj.search(cr, uid, [('sel_cert', '=', 'si')]) 
    val = self._get_product_available_func(('done')) 
    if pids == 'si': 
      return val 
相关问题