2017-07-25 51 views
2

我有一個名爲類detail_base,和其他兩個類的名字flight_detailtour_detail,最後兩班從第一個繼承,狀物體這樣的:Odoo,不能有兩個不同的兄弟姐妹在同一視圖

class DetailBase(models.Model): 
    _name = 'detail_base' 
    fee = fields.Monetary('Fee') 
    passenger = fields.Char('Passenger') 

class FlightDetail(models.Model): 
    _name = 'flight_detail' 
    _inherits = 'detail_base' 
    passport = fields.Char('Passport') 

class TourDetail(models.Model): 
    _name = 'tour_detail' 
    _inherits = 'detail_base' 
    age = fields.Integer('Tourist Age') 

問題是,當我致電flight_detailtour_detail在同一視圖中,瀏覽器無法處理這兩個階級的共同屬性,如果我給你5 tour_detail費用,該號碼將被存儲到flight_detail費用

看來這個問題涉及到不同對象的同名屬性是兄弟姐妹

我會很感激任何幫助。

回答

0

你應該或者使用_inherit

class DetailBase(models.AbstractModel): 
    _name = 'detail_base' 
    fee = fields.Monetary('Fee') 
    passenger = fields.Char('Passenger') 

class FlightDetail(models.Model): 
    _name = 'flight_detail' 
    _inherit = 'detail_base' 
    passport = fields.Char('Passport') 

class TourDetail(models.Model): 
    _name = 'tour_detail' 
    _inherit = 'detail_base' 
    age = fields.Integer('Tourist Age') 

應當要麼創建3個的數據庫表(detail_base作爲Model)或2個數據庫表(AbstractModel)。

或者你用_inherits,如:

class DetailBase(models.Model): 
    _name = 'detail_base' 
    fee = fields.Monetary('Fee') 
    passenger = fields.Char('Passenger') 

class FlightDetail(models.Model): 
    _name = 'flight_detail' 
    _inherits = {'detail_base': 'base_id'} 
    passport = fields.Char('Passport') 
    base_id = fields.Many2one('detail_base', required=True, ondelete='cascade') 

class TourDetail(models.Model): 
    _name = 'tour_detail' 
    _inherit = {'detail_base': 'base_id'} 
    age = fields.Integer('Tourist Age') 
    base_id = fields.Many2one('detail_base', required=True, ondelete='cascade') 

,將創建3個表,並feepassenger將被存儲在detail_base表。 Odoo會從那裏獲得它,因爲它是一種代表繼承。

+0

非常感謝你,你的回答解決了這個問題。 –

0

使用繼承:

1-繼承不_name:

inherit = 'model.name' 

new_field = fields... 

這個這個字段添加到model.name

2 - 繼承與_name:

inherit = 'model.name' 
_name = 'new.model' 

,這裏將使用與model.name相同的結構在數據庫中創建新的tabel。

繼承:代理繼承。

最好的例子就是res.usersres.partners用戶是partener所以當我們創建了一個res.users記錄,我們必須創建一個res.partener持有,如姓名,電子郵件地址COMMUN場...以及與用戶喜歡passowrd和登錄信息存儲在res.users模型和繼承類型中,您可以直接訪問res.partener的字段,而無需創建相關字段。你可以做user_record.name.email.address這不會是一個問題。

我喜歡把它看作one one關係。

_inherits = {model.name : many2one_field_id } 
    _name = 'new.model' 

    # m2o field should be required and ondelete = cascade 
    many2one_field_id = fields.Many2one('model.name', string='Label', required=True, ondelete="cascade") 

所以當你創建new.model的記錄所有字段都在model.name將存儲在model.name

+0

非常感謝你的回答,解決了這個問題。 –

+0

如果它解決了您的問題,請接受我的回答 – Cherif

+0

我只能接受一個答案,而您的答案與第一個答案非常相似,如果我可以接受這兩個答案,我會這麼做,但我非常感謝您的時間。 –