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

时间:2013-01-04 15:33:20

标签: python postgresql openerp

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

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

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

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

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

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

那么,如何在不使ORM触及数据库方案约束的情况下在表单视图中包含必填字段?或者如何根据对象的状态动态更改所需的字段?

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:6)

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

有多种方法可以执行您的代码。

  1. required=True文件中设置.py并为该字段设置默认值。
  2. 制作required=False并在required=True中设置view.xml
  3. 制作required=False并在required=True中设置view.xml以获取某种状态。
  4. 这可能有助于解决您的问题。