2013-07-28 67 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 
相關問題