从Odoo8中的父模型类对象访问子模型类

时间:2015-04-02 16:03:46

标签: openerp odoo openerp-8 odoo-8

有没有办法从父模型类对象访问子模型类对象,或者现在这个父模型类对象具有哪个子模型类?

以下是我的模型类:

class Content(models.Model):
    _name = 'content'

    title = fields.Char(string='Title', required=False)
    summary = fields.Char(string='Summary', required=False)
    description = fields.Char(string='Description', required=False)


class Video(models.Model):
    _name = 'video'
    _inherits = {'content': 'content_id'}

    duration = fields.Float(string='Duration', required=False)


class Image(models.Model):
    _name = 'image'
    _inherits = {'content': 'content_id'}

    width = fields.Float(string='Width', required=False)
    height = fields.Float(string='Height', required=False)

如果我有一个“Content”类的对象说“content1”有一个子对象“image1”,有没有办法从“content1”对象或现在那种类型的“content1”访问该“image1”对象是“形象”?

以后内容可以有很多子类,所以我不想查询所有子类。

1 个答案:

答案 0 :(得分:1)

在Odoo中你可以双向旅行,但你的模型应该像这样配置,

class Content(models.Model):
    _name = 'content'
    _rec_name='title'

    title = fields.Char(string='Title', required=False)
    summary = fields.Char(string='Summary', required=False)
    description = fields.Char(string='Description', required=False)
    video_ids : fields.One2many('video','content_id','Video')
    image_ids : fields.One2many('image','content_id','Video')

class Video(models.Model):
    _name = 'video'
    _inherit = 'content'

    duration = fields.Float(string='Duration', required=False)
    content_id = fields.Many2one('content','Content')

class Image(models.Model):
    _name = 'image'
    _inherit = 'content'

    width = fields.Float(string='Width', required=False)
    height = fields.Float(string='Height', required=False)
    content_id = fields.Many2one('content','Content')

您可以通过这种方式调用来访问子类的功能。

for video in content1.video_ids:
    ## you can access properties of child classes like... video.duration

for image in content1.image_ids:
    print image.width

类似地,您可以以相同的方式调用子类的方法。

如果您的目标是做其他事情,请用示例指定。