2015-04-02 95 views
1

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

这里是我的模型类:

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) 

如果我有“内容”类的一个对象说“内容1”有子对象“图像1”,在那里访问的方式“图像1”对象来自“content1”对象还是现在该类型的“content1”是“Image”?

内容将来可能有很多子类,所以我不想查询所有的子类。

回答

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 

同样,你可以用同样的方法调用子类的方法。

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

+0

其实我想要避免的是每次创建一个新的子类时修改父类,即在父类中添加“_ids = fields.One2many()”字段。如果我不能从父类的对象访问子类的对象,只需要知道这个父对象属于哪个子类就足够了,这样我就不必查询所有的子类而只需要查询一个子类。所以我正在寻找一种解决方案,比如我在父类中添加了一个类似“child_table”的字段,并且每个子类都使用其“_name”属性填充此父字段。用这种方式,我觉得它会容易得多。 – 2015-04-03 07:49:21

+1

以适当的方式维护关系总是明智的,因此您将获得oops允许的所有自由。 – 2015-04-03 09:39:12