1

親モデル クラス オブジェクトから子モデル クラス オブジェクトにアクセスする方法はありますか?または、この親モデル クラス オブジェクトにはどの子モデル クラスがありますか?

ここに私のモデルクラスがあります:

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)

子オブジェクト「image1」を持つ「content1」という「Content」クラスのオブジェクトがある場合、「content1」オブジェクトからその「image1」オブジェクトにアクセスする方法はありますか、それとも「content1」のタイプが「Image」です"?

コンテンツには将来多くの子クラスが含まれる可能性があるため、すべての子クラスを照会したくありません。

4

1 に答える 1

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

同様に、子クラスのメソッドも同じ方法で呼び出すことができます。

あなたの目的が何か他のことをすることである場合は、例でそれを指定してください。

于 2015-04-03T04:27:15.477 に答える