Python 函数将字典作为参数
“总资源”:Python 函数将字典作为参数,python,odoo,openerp-7,Python,Odoo,Openerp 7,“总资源”:字段。函数(\u total\u resources,method=True,string='total resources',type='char',)是我的字段。函数 def _total_resources(self, cr, uid, ids, field_name, arg, context): res = {} reqrd_bffr = 0 trng_bffr = 0 billable = 0 list_resources = se
字段。函数(\u total\u resources,method=True,string='total resources',type='char',)是我的字段。函数
def _total_resources(self, cr, uid, ids, field_name, arg, context):
res = {}
reqrd_bffr = 0
trng_bffr = 0
billable = 0
list_resources = self.browse(cr,uid,ids[0]).resource_all_id
print"list_resources",list_resources
for status_chk in list_resources :
status_resrc = status_chk.status_id.name
if status_resrc == 'Required Buffer':
reqrd_bffr=reqrd_bffr + 1
elif status_resrc == 'Training Buffer':
trng_bffr=trng_bffr + 1
elif status_resrc == 'Billable':
billable=billable + 1
total = len(list_resources)
res = {'total_resources' : total,'req_buffr':reqrd_bffr,'trng_buffr': trng_bffr, 'billable' : billable}
return res
当我执行此命令时,会出现如下错误
OpenERP服务器错误
Client Traceback (most recent call last):
File "/opt/openerp/openerp_7/openerp/addons/web/http.py", line 204, in dispatch
response["result"] = method(self, **self.params)
File "/opt/openerp/openerp_7/openerp/addons/web/controllers/main.py", line 1128, in call_kw
return self._call_kw(req, model, method, args, kwargs)
File "/opt/openerp/openerp_7/openerp/addons/web/controllers/main.py", line 1114, in _call_kw
records = req.session.model(model).read(*args, **kwargs)
File "/opt/openerp/openerp_7/openerp/addons/web/session.py", line 42, in proxy
result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw)
File "/opt/openerp/openerp_7/openerp/addons/web/session.py", line 30, in proxy_method
result = self.session.send(self.service_name, method, *args)
File "/opt/openerp/openerp_7/openerp/addons/web/session.py", line 103, in send
raise xmlrpclib.Fault(openerp.tools.ustr(e), formatted_info)
在fields.function方法中,您应该返回一个字典,其中ID列表作为键,字典中的值如下:
def _total_resources(self, cr, uid, ids, field_name, arg, context):
res = {}
reqrd_bffr = 0
trng_bffr = 0
billable = 0
for id in ids:
res[id] = {
'total_resources' : 0,
'req_buffr':0,
'trng_buffr': 0,
'billable' : 0
}
list_resources = self.browse(cr,uid,ids[0]).resource_all_id
print"list_resources",list_resources
for status_chk in list_resources :
status_resrc = status_chk.status_id.name
if status_resrc == 'Required Buffer':
reqrd_bffr=reqrd_bffr + 1
elif status_resrc == 'Training Buffer':
trng_bffr=trng_bffr + 1
elif status_resrc == 'Billable':
billable=billable + 1
total = len(list_resources)
res[id] = {'total_resources' : total,'req_buffr':reqrd_bffr,'trng_buffr': trng_bffr, 'billable' : billable}
return res
干得好。。。但是total=len(list_resources)在浏览器中返回[object object],Billable返回1,required buffer返回2,但总资源必须是3,而不是返回[object object]。这是正常的,因为list_resources是当前对象的“resource_all_id”字段的值。我认为“resource\u all\u id”是指向另一个对象的多个字段。您应该通过编写以下命令来获取包含此对象中良好值的字段的值:list_resources=self.browse(cr,uid,ids[0]).resource_all_id.the_field_You_need_值如果我打印res[id],它会给出类似于{total_resources':3,'req_buffer':2,'trng_buffer':0,'bilable':1}但在浏览器中它会显示[object object object]我的xml代码看起来像,并且我的python文件包含一个my python文件,其中包含'total_resources':fields.integer('total resources'),'req_Buffer':fields.integer('Required Buffer'),'trng_Buffer':fields.integer('Training Buffer'),'billable':fields.integer('billable'),'total_resources':fields.function(_-total_-resources,method=True,string='total-resources',type='char',),}所有字段作为_-total_-resources方法返回的dict的键返回,应该是fields.function。
def _total_resources(self, cr, uid, ids, field_name, arg, context):
res = {}
reqrd_bffr = 0
trng_bffr = 0
billable = 0
for id in ids:
res[id] = {
'total_resources' : 0,
'req_buffr':0,
'trng_buffr': 0,
'billable' : 0
}
list_resources = self.browse(cr,uid,ids[0]).resource_all_id
print"list_resources",list_resources
for status_chk in list_resources :
status_resrc = status_chk.status_id.name
if status_resrc == 'Required Buffer':
reqrd_bffr=reqrd_bffr + 1
elif status_resrc == 'Training Buffer':
trng_bffr=trng_bffr + 1
elif status_resrc == 'Billable':
billable=billable + 1
total = len(list_resources)
res[id] = {'total_resources' : total,'req_buffr':reqrd_bffr,'trng_buffr': trng_bffr, 'billable' : billable}
return res