AttributeError:'NoneType'对象没有属性'get'-Python-OpenErp

AttributeError:'NoneType'对象没有属性'get'-Python-OpenErp,python,function,orm,openerp,Python,Function,Orm,Openerp,我需要从另一个对象product.product读取对象中的一个字段,即purchase.order 此字段是选择类型字段,因此如果此字段已选择si,则do _get _product _available _func'done'是product.product中已声明的函数 这是purchase.order中的选择字段 这个函数应该从product.product中检索该字段 已完成_get_product_available_func'的函数 因此,当purchase.order中的sel\

我需要从另一个对象product.product读取对象中的一个字段,即purchase.order 此字段是选择类型字段,因此如果此字段已选择si,则do _get _product _available _func'done'是product.product中已声明的函数

这是purchase.order中的选择字段

这个函数应该从product.product中检索该字段

已完成_get_product_available_func'的函数

因此,当purchase.order中的sel\u cert字段的值为si时,我需要在product.product中执行_get\u product\u available\u 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'
也许我应该在“获取产品可用功能”中调用“产品可用数量”

有人能澄清这一点吗

提前谢谢

试试这个:

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
更多想法:

试一下这个:

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'对象没有属性'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

现在,pids可能是si或si。

错误消息基本上是说,您使用了get方法处理一些您希望使用该方法(可能是dict)的内容,但结果是没有。你应该在你的代码中添加一些保护,检查你的变量是否真的是你认为的那样…嗯,我明白了,我现在要试试你的答案,好像一个没有按应该的方式声明的东西。第一个代码在“产品”菜单上显示“未定义”,甚至无法访问它们,因为“pool”可能在当前对象中得到覆盖,然后我尝试了第二个代码,但仍然得到属性错误,你说可能是选择类型字段中的“dict”?也许返回的不是我期望的?新想法:描述证书。。。仅当pids=='si'时才会返回某些内容。如果pids!='还有,你可能想看看这个网站:它确实是在函数的输出中,要用'if pids.lower='si':'尝试另一个想法。它给我'AttributeError:'list'对象没有属性'lower,我想这是我给你评论的默认值,明天试试,看看会发生什么,非常感谢!好吧,至少我们现在知道pids是一个列表。是的,谢谢!:如果遇到困难,我将尝试另一种解决方案,仅此而已,再次感谢您!
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
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
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