如何使OpenERP中的字段仅对特定的工作流状态是必需的?

2024-05-15 06:03:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的OpenERP installation中,我有以下字段,这是以前不需要的,但是我将required参数更改为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触及数据库方案约束呢?或者如何根据对象的状态动态地更改所需的字段?


Tags: 数据库true参数ormrequirednotinstallationposition
2条回答

若要使某个字段仅在某些状态下是必需的,请将其保留为模型中不需要的字段,并在“窗体”视图中设置需要该字段的条件:

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

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

有多种方法可以完成代码。

  1. .py文件中生成required=True,并为该字段设置默认值。
  2. 制作required=False,并在view.xml中设置required=True
  3. required=False设为view.xml中的required=True作为对象的某个状态。

这可能有助于解决你的问题。

相关问题 更多 >

    热门问题