[英]Problems overwriting a model field in Python in Odoo?
我創建了一個修改其他模塊的模塊(命名為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
和模型res.partner
的字段function
上。
我不能得出結論。 有人可以幫我嗎? 先感謝您!
您應該將“新”字段的名稱命名為“ birth_date”或“ dob”或“ birthday”以外的名稱,以避免更改現有的字段數據類型。 在下一步中,您可以將值從當前“生日”字段復制到新字段(通過postgresql)。
最后,一位同事向我展示了解決方案:
與Odoo無關,這是由於PostgreSQL。 通常,在PostgreSQL中,除某些情況外,無法更改列的數據類型(即使該列為空),例如:
這是因為我無法更改Char類型的字段,而無法將其轉換為Date(我的嘗試帶有birthdate )或Many2one(我的嘗試帶有function )類型的字段。 另一方面,我能夠覆蓋一個Selection字段(實際上,在PostgreSQL中是將一個Char轉換為另一個Char)。
因此得出結論:如果要更改字段的數據類型,請檢查最終的數據類型是否為char(fields.Char,fields.Selection等)或其他可能的強制轉換。 然后,您可以使用與以前相同的名稱來命名新字段。 如果不是,則必須使用其他名稱來命名新字段,否則PostgreSQL將使用name_moved0 , name_moved1等復制該列。
我希望這對任何人都有幫助!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.