在我的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触及数据库方案约束的情况下在表单视图中包含必填字段?或者如何根据对象的状态动态更改所需的字段?
答案 0 :(得分:13)
要仅在某些状态下创建一个字段,请将其保留为模型中不需要的字段,并在表单视图中设置需要该字段的条件:
<field
name="fiscal_position"
attrs="{'required':[('state','in',['pending','open'])]}"
/>
答案 1 :(得分:6)
如果您在required=True
文件中写.py
,则ORM会向该字段添加非空约束。
有多种方法可以执行您的代码。
required=True
文件中设置.py
并为该字段设置默认值。required=False
并在required=True
中设置view.xml
。required=False
并在required=True
中设置view.xml
以获取某种状态。这可能有助于解决您的问题。