2013-01-04 11 views
10

W mojej instalacji OpenERP mam następujące pole, które nie było wymagane wcześniej, ale zmieniłem wymagany argument na True.Jak sprawić, aby pole w OpenERP było wymagane tylko dla określonego stanu przepływu pracy?

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

W dzienniku debugowania widzę, że ORM próbuje ustawić nie zerowe ograniczenie dla tego pola w bazie danych.

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

Jak mogę temu zapobiec? Moim pomysłem jest posiadanie wymaganej flagi True, tylko dla nowych rekordów i bez ograniczenia NOT NULL. W innych przypadkach występują błędy integralności PostgreSQL:

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

Tak, jak mogę mieć wymagane pola w widoku formularza, bez ORM dotknąć ograniczenia schematu bazy danych? Albo w jaki sposób mogę zmienić pole wymagane dynamicznie, zgodnie ze stanem obiektu?

Odpowiedz

12

Aby pole wymagane tylko w niektórych państwach, pozostawić go jako nie wymagane w modelu, w widoku formularza określają warunki, na których będzie wymagane pole:

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

Dzięki za pomoc. –

5

Jeśli piszesz required=True w pliku .py ORM doda do tego pola nie ma wartości null.

Istnieje wiele sposobów na wykonanie kodu.

  1. Bądź required=True w .py plik i ustawić wartość domyślną dla tego pola.
  2. Utwórz required=False i ustaw required=True w view.xml.
  3. Utwórz required=False i ustaw required=True w view.xml dla niektórych stanów obiektu.

Może to pomóc w rozwiązaniu problemu.

+0

Dzięki. Spróbuję też. –

Powiązane problemy