我有一个名为 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 。费用。
似乎问题与兄弟的不同对象的同名属性有关。
我将不胜感激。
答案 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_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个表,fee
和passenger
将存储在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.users
和res.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
中。