如何在OpenERP中创建字段仅适用于特定的工作流状态?

Jor*_*zov 11 python postgresql openerp

在我的OpenERP安装中,我有以下字段,之前不需要,但我将所需的参数更改为True.

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

在调试日志中,我看到ORM尝试为数据库中的该字段设置非空约束.

2013-01-04 15:28:56 EET STATEMENT:  ALTER TABLE "account_invoice"
    ALTER COLUMN "fiscal_position" SET NOT NULL
Run Code Online (Sandbox Code Playgroud)

我怎么能防止这种情况?我的想法是获得所需的True标志,仅用于新记录并且没有NOT NULL约束.在其他情况下发生PostgreSQL完整性错误:

IntegrityError: null value in column "fiscal_position" violates
    not-null constraint
Run Code Online (Sandbox Code Playgroud)

那么,我怎样才能在表单视图中有一个必填字段,而不使ORM触及数据库方案约束?或者如何根据对象的状态动态更改所需的字段?

Dan*_*eis 13

要仅在某些状态下创建字段,请将其保留为模型中不需要的字段,并在表单视图中设置要求字段的条件:

<field
    name="fiscal_position"
    attrs="{'required':[('state','in',['pending','open'])]}"
    />
Run Code Online (Sandbox Code Playgroud)


Nil*_*esh 6

如果您required=True.py文件中写入,则ORM将向该字段添加非空约束.

有多种方法可以执行代码.

  1. required=True.py文件和该字段设置默认值.
  2. 制作required=Falserequired=True投入使用view.xml.
  3. 制作required=False并设置required=Trueview.xml为对象的一些状态.

这可能有助于解决您的问题.