字典更新序列元素#0的长度为3; 2是必需的

时间:2022-09-28 02:28:28

I want to add lines to the object account.bank.statement.line through other object but I get this error: "dictionary update sequence element #0 has length 3; 2 is required"

我想通过其他对象向对象account.bank.statement.line添加行但是我收到此错误:“字典更新序列元素#0的长度为3;需要2”

def action_account_line_create(self, cr, uid, ids):
    res = False
    cash_id = self.pool.get('account.bank.statement.line')
    for exp in self.browse(cr, uid, ids):
        company_id = exp.company_id.id
        #statement_id = exp.statement_id.id
        lines = []
        for l in exp.line_ids:
            lines.append((0, 0, {
                'name': l.name,
                'date': l.date,
                'amount': l.amount,
                'type': l.type,
                'statement_id': exp.statement_id.id,
                'account_id': l.account_id.id,
                'account_analytic_id': l.analytic_account_id.id,
                'ref': l.ref,
                'note': l.note,
                'company_id': l.company_id.id
            }))

        inv_id = cash_id.create(cr, uid, lines,context=None)
        res = inv_id
    return res 

I changed it on that but then I ran into this error:

我改变了它,但后来我遇到了这个错误:

  File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\workflow\wkf_expr.py", line 68, in execute
  File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\workflow\wkf_expr.py", line 58, in _eval_expr
  File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\tools\safe_eval.py", line 241, in safe_eval
  File "C:\Program Files (x86)\OpenERP 6.1-20121029-003136\Server\server\.\openerp\tools\safe_eval.py", line 108, in test_expr
  File "<string>", line 0   
   ^
SyntaxError: unexpected EOF while parsing

Code:

码:

def action_account_line_create(self, cr, uid, ids, context=None):
    res = False
    cash_id = self.pool.get('account.bank.statement.line')
    for exp in self.browse(cr, uid, ids):
        company_id = exp.company_id.id
        lines = []
        for l in exp.line_ids:
            res = cash_id.create ( cr, uid, {
                'name': l.name,
                'date': l.date,
                'amount': l.amount,
                'type': l.type,
                'statement_id': exp.statement_id.id,
                'account_id': l.account_id.id,
                'account_analytic_id': l.analytic_account_id.id,
                'ref': l.ref,
                'note': l.note,
                'company_id': l.company_id.id
            }, context=None)
    return res

1 个解决方案

#1


50  

This error raised up because you trying to update dict object by using a wrong sequence (list or tuple) structure.

由于您尝试使用错误的序列(列表或元组)结构更新dict对象,因此引发此错误。

cash_id.create(cr, uid, lines,context=None) trying to convert lines into dict object:

cash_id.create(cr,uid,lines,context = None)尝试将行转换为dict对象:

(0, 0, {
                'name': l.name,
                'date': l.date,
                'amount': l.amount,
                'type': l.type,
                'statement_id': exp.statement_id.id,
                'account_id': l.account_id.id,
                'account_analytic_id': l.analytic_account_id.id,
                'ref': l.ref,
                'note': l.note,
                'company_id': l.company_id.id
            })

Remove the second zero from this tuple to properly convert it into a dict object.

从该元组中删除第二个零以将其正确转换为dict对象。

To test it your self, try this into python shell:

要测试你的自己,试试这个到python shell:

>>> l=[(0,0,{'h':88})]
>>> a={}
>>> a.update(l)

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    a.update(l)
ValueError: dictionary update sequence element #0 has length 3; 2 is required
>>> l=[(0,{'h':88})]
>>> a.update(l)
>>> 

#1


50  

This error raised up because you trying to update dict object by using a wrong sequence (list or tuple) structure.

由于您尝试使用错误的序列(列表或元组)结构更新dict对象,因此引发此错误。

cash_id.create(cr, uid, lines,context=None) trying to convert lines into dict object:

cash_id.create(cr,uid,lines,context = None)尝试将行转换为dict对象:

(0, 0, {
                'name': l.name,
                'date': l.date,
                'amount': l.amount,
                'type': l.type,
                'statement_id': exp.statement_id.id,
                'account_id': l.account_id.id,
                'account_analytic_id': l.analytic_account_id.id,
                'ref': l.ref,
                'note': l.note,
                'company_id': l.company_id.id
            })

Remove the second zero from this tuple to properly convert it into a dict object.

从该元组中删除第二个零以将其正确转换为dict对象。

To test it your self, try this into python shell:

要测试你的自己,试试这个到python shell:

>>> l=[(0,0,{'h':88})]
>>> a={}
>>> a.update(l)

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    a.update(l)
ValueError: dictionary update sequence element #0 has length 3; 2 is required
>>> l=[(0,{'h':88})]
>>> a.update(l)
>>>