2013-01-04 10 views
10

Nella mia installazione di OpenERP ho il seguente campo, che non era necessario prima, ma ho cambiato l'argomento richiesto su True.Come rendere il campo in OpenERP richiesto solo per lo stato del flusso di lavoro specifico?

'fiscal_position': fields.many2one(
    'account.fiscal.position', 
    'Fiscal Position', 
    required=True, 
    readonly=True, 
    states={'draft':[('readonly',False)]} 
    ), 

Nel registro di debug vedo che l'ORM tenta di impostare un vincolo non nullo per quel campo nel database.

2013-01-04 15:28:56 EET STATEMENT: ALTER TABLE "account_invoice" 
    ALTER COLUMN "fiscal_position" SET NOT NULL 

Come posso impedirlo? La mia idea è di avere il True flag richiesto, solo per i nuovi record e senza avere un vincolo NOT NULL. In altri casi gli errori di integrità PostgreSQL verificarsi:

IntegrityError: null value in column "fiscal_position" violates 
    not-null constraint 

Così, come posso avere un campo obbligatorio nella visualizzazione modulo, senza fare l'ORM toccare i vincoli dello schema del database? O come posso modificare dinamicamente il campo richiesto, in base allo stato dell'oggetto?

risposta

12

Per rendere un campo obbligatorio solo in alcuni stati, lasciarlo come non richiesto nel Modello, e nella visualizzazione sotto forma impostare le condizioni su cui verrà richiesto il campo:

<field 
    name="fiscal_position" 
    attrs="{'required':[('state','in',['pending','open'])]}" 
    /> 
+0

Grazie per l'aiuto. –

5

se si scrive required=True nel file .py quindi ORM aggiungerà vincoli non nulli a quel campo.

Esistono diversi modi per eseguire il codice.

  1. Fai required=True in .py di file e il valore di default impostato per quel campo.
  2. Marca required=False e impostare required=True in view.xml.
  3. Effettuare required=False e impostare required=True in view.xml per alcuni stati dell'oggetto.

Questo può aiutare a risolvere il tuo problema.

+0

Grazie. Proveremo anche questo. –

Problemi correlati