在Odoo中用Python覆盖模型字段的问题?

时间:2015-05-19 14:00:15

标签: python openerp odoo duplicate-data odoo-8

我创建了一个修改其他模块的模块(名为base)。在模块base中有res.partner模型,在此模型中有字段birthdate

_columns = {
...
    'birthdate': fields.char('Birthdate'),
...
}

我在模块中执行的操作是覆盖此字段以使其为Date类型:

birthdate = fields.Date('Birthdate')

一切似乎都没问题,但是,在更新Odoo服务器之后,该列中引入的数据从视图中消失,当我检查数据库时,我发现列birthdate正在与其他名称重复birthdate_moved0birthdate_moved1birthdate_moved2等等(其中一半属于 char ,另一半属于 date )。存储在birthdate中的值正被移动到这些其他列(这就是我无法在视图中看到数据的原因,因为只显示了birthdate表单中。)

但是,我能够通过Python覆盖几个字段。但是这个重复问题发生在我的birthdate字段和模型function的字段res.partner上。

我无法得出结论。有人可以帮帮我吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

您应该将“新”字段命名为“birth_date”或“dob”或“生日”以外的任何内容,以避免更改现有字段数据类型。在下一步中,您可以将当前“生日”字段中的值复制到新字段(通过postgresql)。

答案 1 :(得分:0)

最后,一位同事向我展示了解决方案:

它不是关于Odoo,它归功于PostgreSQL。通常,在PostgreSQL中,不可能改变列的数据类型(即使这是空的),除了某些情况,例如:

  • 整数 char :因为可以转换为char。因此,在Odoo中,当你将field.Date,field.Integer,field.Many2one等的数据类型更改为fields.Char时,没有问题。但是,如果您尝试将fields.Char更改为fields.Date或fields.Many2one等,PostgreSQL将复制该列,因为尚未准备好进行该类型的转换。

之所以如此,是因为我无法更改Char类型的字段并将其转换为种类日期(我使用 birthdate )或Many2one(我尝试使用功能)。而另一方面,我能够覆盖一个Selection字段(实际上,在PostgreSQL中将Char转换为另一个Char)。

总之: 如果要更改字段的数据类型,请检查最终的数据类型是char(fields.Char,fields.Selection等)还是其他可能的转换。然后,您可以使用与以前相同的名称命名新字段。如果没有,您必须使用其他名称命名新字段,否则PostgreSQL将使用 name_moved0 name_moved1 等复制该列...

我希望这对任何人都有帮助!!