我创建了一个修改其他模块的模块(名为base
)。在模块base
中有res.partner
模型,在此模型中有字段birthdate
:
_columns = {
...
'birthdate': fields.char('Birthdate'),
...
}
我在模块中执行的操作是覆盖此字段以使其为Date
类型:
birthdate = fields.Date('Birthdate')
一切似乎都没问题,但是,在更新Odoo服务器之后,该列中引入的数据从视图中消失,当我检查数据库时,我发现列birthdate
正在与其他名称重复birthdate_moved0
,birthdate_moved1
,birthdate_moved2
等等(其中一半属于 char ,另一半属于 date )。存储在birthdate
中的值正被移动到这些其他列(这就是我无法在视图中看到数据的原因,因为只显示了birthdate
表单中。)
但是,我能够通过Python覆盖几个字段。但是这个重复问题发生在我的birthdate
字段和模型function
的字段res.partner
上。
我无法得出结论。有人可以帮帮我吗?提前谢谢!
答案 0 :(得分:1)
您应该将“新”字段命名为“birth_date”或“dob”或“生日”以外的任何内容,以避免更改现有字段数据类型。在下一步中,您可以将当前“生日”字段中的值复制到新字段(通过postgresql)。
答案 1 :(得分:0)
最后,一位同事向我展示了解决方案:
它不是关于Odoo,它归功于PostgreSQL。通常,在PostgreSQL中,不可能改变列的数据类型(即使这是空的),除了某些情况,例如:
之所以如此,是因为我无法更改Char类型的字段并将其转换为种类日期(我使用 birthdate )或Many2one(我尝试使用功能)。而另一方面,我能够覆盖一个Selection字段(实际上,在PostgreSQL中将Char转换为另一个Char)。
总之: 如果要更改字段的数据类型,请检查最终的数据类型是char(fields.Char,fields.Selection等)还是其他可能的转换。然后,您可以使用与以前相同的名称命名新字段。如果没有,您必须使用其他名称命名新字段,否则PostgreSQL将使用 name_moved0 , name_moved1 等复制该列...
我希望这对任何人都有帮助!!