2015-07-07 11 views
5

Come rendere modificabile il campo funzionale in Openerp?Rendi modificabile un campo funzionale in Openerp?

Quando creiamo

'capname': fields.function(
    _convert_capital, string='Display Name', type='char', store=True 
), 

Questo verrà visualizzato è di sola lettura e non possiamo in grado di modificare il testo.

Come rendiamo modificabile questo campo?

+1

quale versione di vudù stai lavorando? –

+0

Versione openerp 7 –

risposta

2

È necessario aggiungere una funzione inversa per rendere il campo modificabile. Questo parametro è chiamato fnct_inv in OpenERP v7. Un esempio:

def _get_test(self, cr, uid, ids, name, args=None, context=None): 
    result = dict.fromkeys(ids, False) 
    for line in self.browse(cr, uid, ids, context=context): 
     if line.test: 
      result[line.id] = line.test 
    return result  

def _set_test(self, cr, uid, id, field_name, field_value, args=None, context=None): 
    obj = self.browse(cr, uid, id) 
    for record in obj: 
     if record.test != field_value: 
      # The record already exists 

      ... 

      cr.execute(
       'UPDATE your_table ' 
       'SET test=%s ' 
       'WHERE id=%s', (field_value, id) 
      ) 
     else: 
      # It is a new record 
      # (or the value of the field was not modified) 

    return True 

_columns = { 
    'test': fields.function(
     string='String for testing', 
     fnct=_get_test, 
     fnct_inv=_set_test,    
     type='char', 
     size=50, 
     store=True, 
    ), 
} 
+3

Sei sicuro che il valore inserito manualmente non verrà sovrascritto e perso nella ricalcola successiva? –

+0

Hai ragione, ho intenzione di modificare la mia risposta. Stai utilizzando Odoo 8 API nella tua risposta, ma userò l'API di OpenERP v7 perché la persona che ha chiesto sta usando OpenERP 7. – ChesuCR

6

Un campo calcolato ha una funzione che calcola automaticamente il suo valore su alcuni dati di origine.

È possibile aggiungerlo all'operazione inversa, aggiornando i dati di origine in base a un valore impostato manualmente su di esso, rendendolo così modificabile.

Dal documentation:

per permettere l'impostazione valori su un campo calcolato, utilizzare il parametro inversa. E 'il nome di una funzione di inversione il calcolo e l'impostazione dei campi rilevanti: codice

Esempio:

document = fields.Char(compute='_get_document', inverse='_set_document') 

def _get_document(self): 
    for record in self: 
     with open(record.get_document_path) as f: 
      record.document = f.read() 
def _set_document(self): 
    for record in self: 
     if not record.document: continue 
     with open(record.get_document_path()) as f: 
      f.write(record.document) 
Problemi correlati