11

在我的 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 触及数据库方案约束?或者如何根据对象的状态动态更改所需的字段?

4

2 回答 2

13

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

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

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

有多种方法可以编写代码。

  1. required=True在文件中制作.py并为该字段设置默认值。
  2. 制作required=False并安装required=Trueview.xml.
  3. 制作required=False并设置对象required=Trueview.xml某些状态。

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

于 2013-01-05T07:38:54.270 回答