2017-07-25 48 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

我只能接受一个答案,而您的答案与第一个答案非常相似,如果我可以接受这两个答案,我会这么做,但我非常感谢您的时间。 –