繁体   English   中英

在Odoo中用Python覆盖模型字段时遇到问题吗?

[英]Problems overwriting a model field in Python in Odoo?

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

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

我在模块中要做的是覆盖此字段,使其类型为Date

birthdate = fields.Date('Birthdate')

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

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

我不能得出结论。 有人可以帮我吗? 先感谢您!

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

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

与Odoo无关,这是由于PostgreSQL。 通常,在PostgreSQL中,除某些情况外,无法更改列的数据类型(即使该列为空),例如:

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

这是因为我无法更改Char类型的字段,而无法将其转换为Date(我的尝试带有birthdate )或Many2one(我的尝试带有function )类型的字段。 另一方面,我能够覆盖一个Selection字段(实际上,在PostgreSQL中是将一个Char转换为另一个Char)。

因此得出结论:如果要更改字段的数据类型,请检查最终的数据类型是否为char(fields.Char,fields.Selection等)或其他可能的强制转换。 然后,您可以使用与以前相同的名称来命名新字段。 如果不是,则必须使用其他名称来命名新字段,否则PostgreSQL将使用name_moved0name_moved1等复制该列。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM