Odoo,在同一视图中不能有两个不同的兄弟对象

时间:2017-07-25 00:26:48

标签: openerp odoo-10 siblings

我有一个名为 detail_base 的类,另外两个类名为 flight_detail tour_detail ,最后两个类继承自第一个类,像这样:

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_detail tour_detail 时,浏览器无法处理这两个类的公共属性,如果我指定5到 tour_detail 费用,该号码将存储在 flight_detail 费用

似乎问题与兄弟的不同对象的同名属性有关。

我将不胜感激。

2 个答案:

答案 0 :(得分: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_baseModel)或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会从那里得到它,因为它是一种代表继承权。

答案 1 :(得分:0)

使用inherit:

1- inherit without _name:

 inherit = 'model.name' 

 new_field = fields...

这会将此字段添加到model.name

2-继承_name:

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

这里将在数据库中创建一个新的tabel,其结构与model.name相同。

inherits:委托继承。

最好的示例是res.usersres.partners用户是合作伙伴,所以当我们创建res.users记录时,我们必须创建一个res.partener来保存名称,电子邮件等社区字段,地址...以及与passowrd和login等用户相关的信息存储在res.users模型中,并且通过继承类型,您可以直接访问res.partener的字段,而无需创建相关字段。您可以执行user_record.name.email.address这不会有问题。

我喜欢将它视为一种二元关系。

   _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中。