簡體   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