Ciao, ho un problema con l'aggiornamento "incrociato" di oggetti. Potrebbe essere una disattenzione banale ma sono un neofita assoluto, quindi chiedo scusa in anticipo...
sono coinvolti due oggetti: 'documento' e 'palazzo'. Entrambi hanno un campo 'state'. L'idea è che quando modifico lo stato di 'documento' (con il pulsante 'button_submit_doc') venga modificato anche lo stato di 'palazzo'. Lo scopo è raggiunto, funziona (o per lo meno gli stati vengono aggiornati come vorrei). Peccato che se poi torno nella view tree di 'documento' venga generato un errore sconosciuto, definito dall'indice (su db) dell'oggetto 'documento' che ho appena creato/modificato. Se elimino da db il record la view torna a funzionare correttamente.
Riporto gli stralci di codice che potrebbero essere coinvolti:
documento.py
class documento(osv.osv):
_columns = {
...
'palazzo_id':fields.many2one('palazzo','Palazzo', required=True),
'state': fields.selection([('draft', 'Bozza'),('submitted', 'In valutazione')], 'Stato documento', readonly=True)
...
}
def button_submit_doc(self, cr, uid, ids, *args):
if not len(ids):
return False
self.write(cr, uid, ids, {'state': 'submitted', })
for doc in self.browse(cr,uid,ids):
idpalazzo = doc.palazzo_id.id
self.pool.get('palazzo').write(cr, uid, idpalazzo, {'state': 'confirmed',})
return True
palazzo.py
class palazzo(osv.osv):
_columns = {
....
'state':fields.selection((('draft', 'Bozza'), ('confirmed', 'Confermato')), 'Stato palazzo',required=True),
}
documento_view.xml
<record id="view_documento_form" model="ir.ui.view">
<field name="name">documento.form</field>
<field name="model">documento</field>
<field name="type">form</field>
<field eval="20" name="priority"/>
<field name="arch" type="xml">
<form string="Nuova Offerta">
<group>
....
<field name="palazzo_id"/>
....
<button name="button_submit_doc" states="draft" string="Proponi" type="object"/>
</group>
</form>
</field>
</record>
<record id="view_documento_tree" model="ir.ui.view">
<field name="name">documento.tree</field>
<field name="model">documento</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Elenco documenti">
....
<field name="cliente_id"/>
...
</tree>
</field>
</record>
L'errore è questo (dalla console del server):
[2010-09-03 17:36:45,398] ERROR:web-services:[01]:
[2010-09-03 17:36:45,398] ERROR:web-services:[02]: Environment Information :
[2010-09-03 17:36:45,398] ERROR:web-services:[03]: System : Linux-2.6.32-25-generic-pae-i686-with-Ubuntu-10.04-lucid
[2010-09-03 17:36:45,398] ERROR:web-services:[04]: OS Name : posix
[2010-09-03 17:36:45,399] ERROR:web-services:[05]: Distributor ID: Ubuntu
[2010-09-03 17:36:45,399] ERROR:web-services:[06]: Description: Ubuntu 10.04.1 LTS
[2010-09-03 17:36:45,399] ERROR:web-services:[07]: Release: 10.04
[2010-09-03 17:36:45,399] ERROR:web-services:[08]: Codename: lucid
[2010-09-03 17:36:45,399] ERROR:web-services:[09]: Operating System Release : 2.6.32-25-generic-pae
[2010-09-03 17:36:45,399] ERROR:web-services:[10]: Operating System Version : #43-Ubuntu SMP Wed Sep 1 11:17:51 UTC 2010
[2010-09-03 17:36:45,399] ERROR:web-services:[11]: Operating System Architecture : 32bit
[2010-09-03 17:36:45,399] ERROR:web-services:[12]: Operating System Locale : it_IT.UTF8
[2010-09-03 17:36:45,399] ERROR:web-services:[13]: Python Version : 2.6.5
[2010-09-03 17:36:45,399] ERROR:web-services:[14]: OpenERP-Server Version : 5.0.12
[2010-09-03 17:36:45,399] ERROR:web-services:[15]: Last revision No. & ID :
[2010-09-03 17:36:45,399] ERROR:web-services:[16]: Traceback (most recent call last):
[2010-09-03 17:36:45,399] ERROR:web-services:[17]: File "/home/dario/openerp-server-5.0.12/bin/osv/osv.py", line 58, in wrapper
[2010-09-03 17:36:45,399] ERROR:web-services:[18]: return f(self, dbname, *args, **kwargs)
[2010-09-03 17:36:45,400] ERROR:web-services:[19]: File "/home/dario/openerp-server-5.0.12/bin/osv/osv.py", line 119, in execute
[2010-09-03 17:36:45,400] ERROR:web-services:[20]: res = pool.execute_cr(cr, uid, obj, method, *args, **kw)
[2010-09-03 17:36:45,400] ERROR:web-services:[21]: File "/home/dario/openerp-server-5.0.12/bin/osv/osv.py", line 111, in execute_cr
[2010-09-03 17:36:45,400] ERROR:web-services:[22]: return getattr(object, method)(cr, uid, *args, **kw)
[2010-09-03 17:36:45,400] ERROR:web-services:[23]: File "/home/dario/openerp-server-5.0.12/bin/osv/orm.py", line 2228, in read
[2010-09-03 17:36:45,400] ERROR:web-services:[24]: result = self._read_flat(cr, user, select, fields, context, load)
[2010-09-03 17:36:45,400] ERROR:web-services:[25]: File "/home/dario/openerp-server-5.0.12/bin/osv/orm.py", line 2362, in _read_flat
[2010-09-03 17:36:45,400] ERROR:web-services:[26]: record[f] = res2[record]
[2010-09-03 17:36:45,400] ERROR:web-services:[27]: KeyError: 27
Probabilmente faccio inconsapevolmente del casino quando lavoro con i metodi dell'orm, ma non riesco a capire dove! Se qualcuno ha un suggerimento è ben accetto!