11

OpenERPのインストールでは、以前は必須ではなかった次のフィールドがありますが、必須の引数をTrueに変更しました。

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

デバッグログで、ORMがデータベースのそのフィールドにnull以外の制約を設定しようとしていることがわかります。

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

どうすればそれを防ぐことができますか?私の考えは、新しいレコードに対してのみ、NOT NULL制約を持たずに、必要なTrueフラグを設定することです。その他の場合、PostgreSQL整合性エラーが発生します。

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

では、ORMをデータベーススキームの制約に触れさせずに、フォームビューに必須フィールドを含めるにはどうすればよいですか?または、オブジェクトの状態に応じて、必要なフィールドを動的に変更するにはどうすればよいですか?

4

2 に答える 2

13

一部の州でのみフィールドを必須にするには、モデルでは必須ではないままにし、フォームビューで、フィールドが必須となる条件を設定します。

<field
    name="fiscal_position"
    attrs="{'required':[('state','in',['pending','open'])]}"
    />
于 2013-01-04T16:44:37.423 に答える
6

ファイルに書き込む場合required=True.pyORMはそのフィールドにnullではない制約を追加します。

コードを実行する方法は複数あります。

  1. ファイルrequired=True.py作成し、そのフィールドのデフォルト値を設定します。
  2. 作成required=Falseして設定required=Trueview.xmlます。
  3. オブジェクトの状態を作成してrequired=False設定required=Trueします。view.xml

これはあなたの問題を解決するのに役立つかもしれません。

于 2013-01-05T07:38:54.270 に答える