gpt4 book ai didi

python - TypeError : list indices must be integers, not str - Odoo v8 到 Odoo v10 社区

转载 作者:行者123 更新时间:2023-11-30 22:40:01 30 4
gpt4 key购买 nike

我有这两种方法:

@api.multi
def new_open_window(self, list_ids, xml_id, module):
""" Generate new window at view form or tree
"""
mod_obj = self.env['ir.model.data']
act_obj = self.env['ir.actions.act_window']
result = mod_obj._get_id(module, xml_id)
imd_id = mod_obj.browse(result, ['res_id'])
result = act_obj.browse(imd_id)
result['res_id'] = list_ids
return result

@api.multi
def create_invoice(self):
""" Create a invoice refund
"""
#context = context or {}
wizard_brw = self.browse()
inv_id = self._context.get('active_id')
for wizard in wizard_brw:
if not wizard.sure:
raise UserError(
_("Validation error!"),
_("Please confirm that you know what you're doing by"
" checking the option bellow!"))
if (wizard.invoice_id and wizard.invoice_id.company_id.jour_id and
wizard.invoice_id and wizard.invoice_id.company_id.acc_id):
inv_id = self.action_invoice_create(wizard,
wizard.invoice_id)
else:
raise UserError(
_('Validation error!'),
_("You must go to the company form and configure a journal"
" and an account for damaged invoices"))
return self.new_open_window([inv_id],
'action_invoice_tree1', 'account')

这些方法最初是这样的(在 v8 上):

    def new_open_window(self, cr, uid, ids, list_ids, xml_id, module,
context=None):
""" Generate new window at view form or tree
"""
mod_obj = self.pool.get('ir.model.data')
act_obj = self.pool.get('ir.actions.act_window')
result = mod_obj._get_id(cr, uid, module, xml_id)
imd_id = mod_obj.read(cr, uid, result, ['res_id'])['res_id']
result = act_obj.read(cr, uid, imd_id)
result['res_id'] = list_ids
return result

def create_invoice(self, cr, uid, ids, context=None):
""" Create a invoice refund
"""
context = context or {}
wizard_brw = self.browse(cr, uid, ids, context=context)
inv_id = context.get('active_id')
for wizard in wizard_brw:
if not wizard.sure:
raise osv.except_osv(
_("Validation error!"),
_("Please confirm that you know what you're doing by"
" checking the option bellow!"))
if (wizard.invoice_id and wizard.invoice_id.company_id.jour_id and
wizard.invoice_id and wizard.invoice_id.company_id.acc_id):
inv_id = self.action_invoice_create(cr, uid, ids, wizard,
wizard.invoice_id, context)
else:
raise osv.except_osv(
_('Validation error!'),
_("You must go to the company form and configure a journal"
" and an account for damaged invoices"))
return self.new_open_window(cr, uid, ids, [inv_id],
'action_invoice_tree1', 'account')

这些方法应读取发票(之前在弹出窗口中选择),然后单击按钮,将此发票重写为已取消的发票,发票名称上带有“PAPEL ANULADO”。 create_invoice 方法调用另一个名为 action_invoice_create 的方法。

这是迁移后的方法:

@api.multi
def action_invoice_create(self, wizard_brw, inv_brw): #cr, uid, ids, wizard_brw, inv_brw, context=None
"""
If the invoice has control number, this function is responsible for
passing the bill to damaged paper
@param wizard_brw: nothing for now
@param inv_brw: damaged paper
"""
invoice_line_obj = self.env['account.invoice.line']
invoice_obj = self.env['account.invoice']
acc_mv_obj = self.env['account.move']
acc_mv_l_obj = self.env['account.move.line']
tax_obj = self.env['account.invoice.tax']
invoice = {}
if inv_brw.nro_ctrl:
invoice.update({
'name': 'PAPELANULADO_NRO_CTRL_%s' % (
inv_brw.nro_ctrl and inv_brw.nro_ctrl or ''),
'state': 'paid',
'tax_line': [],
})
else:
raise UserError(
_('Validation error!'),
_("You can run this process just if the invoice have Control"
" Number, please verify the invoice and try again."))
invoice_obj.write([inv_brw.id], invoice) #cr, uid, [inv_brw.id], invoice, context=context
for line in inv_brw.invoice_line:
invoice_line_obj.write(
[line.id],
{'quantity': 0.0, 'invoice_line_tax_id': [],
'price_unit': 0.0}) #cr, uid, context=context

tax_ids = self.env['account.tax'].search([]) # cr, uid, [], context=context
tax = tax_obj.search([('invoice_id', '=', inv_brw and inv_brw.id)]) # cr, uid, contet=context
if tax:
tax_obj.write(tax[0], {'invoice_id': []}) #cr, uid, tax[0], {'invoice_id': []}, context=context
tax_obj.create({
'name': 'SDCF',
'tax_id': tax_ids and tax_ids[0],
'amount': 0.00,
'tax_amount': 0.00,
'base': 0.00,
'account_id': inv_brw.company_id.acc_id.id,
'invoice_id': inv_brw and inv_brw.id}, {}) #cr ,uid, was first
move_id = inv_brw.move_id and inv_brw.move_id.id

if move_id:
acc_mv_obj.button_cancel([inv_brw.move_id.id]) #cr, uid, [inv_brw.move_id.id], context=context
acc_mv_obj.write([inv_brw.move_id.id],{'ref': 'Damanged Paper'}) #cr, uid, [inv_brw.move_id.id],{'ref': 'Damanged Paper'}, context=context
acc_mv_l_obj.unlink([i.id for i in inv_brw.move_id.line_id]) #cr, uid was first
return inv_brw.id

我实际上不太确定这是否应该是@api.multi我认为它应该是@api.model虽然我不太确定。

无论如何,当我单击 create_invoice 方法时,它会抛出以下错误:

Traceback (most recent call last):
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 638, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 675, in dispatch
result = self._call_function(**self.params)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 331, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/service/model.py", line 119, in wrapper
return f(dbname, *args, **kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 324, in checked_call
result = self.endpoint(*a, **kw)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 933, in __call__
return self.method(*args, **kw)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/http.py", line 504, in response_wrap
response = f(*args, **kw)
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/web/controllers/main.py", line 866, in call_button
action = self._call_kw(model, method, args, {})
File "/home/kristian/odoov10/odoo-10.0rc1c-20161005/odoo/addons/web/controllers/main.py", line 854, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/api.py", line 681, in call_kw
return call_kw_multi(method, model, args, kwargs)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/api.py", line 672, in call_kw_multi
result = method(recs, *args, **kwargs)
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/wizard/wizard_invoice_nro_ctrl.py", line 134, in create_invoice
'action_invoice_tree1', 'account')
File "/home/kristian/odoov10/gilda/l10n_ve_fiscal_requirements/wizard/wizard_invoice_nro_ctrl.py", line 106, in new_open_window
imd_id = mod_obj.browse(result, ['res_id'])
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 4755, in browse
return self._browse(ids, self.env, prefetch)
File "/home/kristian/.virtualenvs/odoov10/lib/python2.7/site-packages/odoo-10.0rc1c_20161005-py2.7.egg/odoo/models.py", line 4742, in _browse
prefetch[cls._name].update(ids)
TypeError: list indices must be integers, not str

错误出现在这一行imd_id = mod_obj.browse(result, ['res_id']),而这一行return self.new_open_window([inv_id], 'action_invoice_tree1', '帐户')

之前,imd_id使用的是read(),我已将其更改为browse(),但仍然出现同样的错误。

我希望我已经解释清楚了。

如果您需要更多信息,请告诉我。

有什么想法吗?

最佳答案

当您使用浏览记录时,您不会传递您希望获取的字段。

ids = [6]
rec = self.env['your.model'].browse(ids)['field_name']

关于python - TypeError : list indices must be integers, not str - Odoo v8 到 Odoo v10 社区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42965467/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com