Ich möchte dem Objekt Linien account.bank.statement.line
durch ein anderes Objekt hinzufügen, erhalte jedoch den folgenden Fehler:
"Das Wörterbuchaktualisierungssequenzelement # 0 hat die Länge 3; 2 ist erforderlich."
Hier ist mein Code:
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
Ich habe es daran geändert, aber dann bin ich auf diesen Fehler gestoßen:
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
Antworten:
Dieser Fehler trat auf, weil Sie versuchen, das
dict
Objekt mithilfe einer falschen Sequenz- (list
odertuple
) Struktur zu aktualisieren .cash_id.create(cr, uid, lines,context=None)
versuchen,lines
in dikt Objekt zu konvertieren :(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 })
Entfernen Sie die zweite Null aus diesem Tupel, um es ordnungsgemäß in ein Diktierobjekt umzuwandeln.
Versuchen Sie dies in der Python-Shell, um es selbst zu testen:
>>> 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)
quelle
Ich habe diesen Fehler erhalten, als ich das Wörterbuch mit der falschen Syntax aktualisiert habe:
Versuchen Sie mit diesen:
anstatt
quelle
Eine der schnellen Möglichkeiten, aus Tupeln gleicher Länge ein Diktat zu erstellen:
>>> t1 = (a,b,c,d) >>> t2 = (1,2,3,4) >>> dict(zip(t1, t2)) {'a':1, 'b':2, 'c':3, 'd':4, }
quelle