在我的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触及数据库方案约束呢?或者如何根据对象的状态动态地更改所需的字段?
若要使某个字段仅在某些状态下是必需的,请将其保留为模型中不需要的字段,并在“窗体”视图中设置需要该字段的条件:
如果在
.py
文件中写入required=True
,则ORM将向该字段添加非空约束。有多种方法可以完成代码。
.py
文件中生成required=True
,并为该字段设置默认值。required=False
,并在view.xml
中设置required=True
。required=False
设为view.xml
中的required=True
作为对象的某个状态。这可能有助于解决你的问题。
相关问题 更多 >
编程相关推荐