Цикл по объектам в модели Odoo 11 - PullRequest
0 голосов
/ 11 октября 2018

Я хотел бы создать функцию на моей модели Artist, чтобы изменить поле num_albums на количество созданных им альбомов.Я полагаю, что я должен использовать функцию вычисления и фильтровать все альбомы по имени исполнителя.Тем не менее, я понятия не имею, как это сделать.Пожалуйста, помогите мне, если вы знаете, как я мог это сделать.

Вот мой код:

class Artist(models.Model) :
    _name = 'artist'
    _order = 'name'

    name = fields.Char('Name of Artist')
    age = fields.Integer(string='Age of Artist')
    nationality = fields.Selection([('France', 'France'), ('GB', 'Great Britain'),
    ('USA', 'United States'), ('Russia', 'Russia'), ('China', 'China'),
    ('Other', 'Other')], 'Nationality')
    num_albums = fields.Integer(compute='_get_num_albums', store=False)

    @api.model
    def _get_num_albums(self) :
        **Enter code here**

class Album(models.Model) :
    _name = 'album'
    _order = 'artist.name'

    artist = fields.Many2one('artist', string='Artist')
    name = fields.Char('Name')
    image = fields.Binary('Album Cover')

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете объявить отношение One2many от исполнителя к его / ее альбомам, а затем просто использовать количество альбомов, например ::

class Artist(models.Model):
    _name = 'artist'
    _order = 'name'

    # ...
    albums = fields.One2many(
        comodel_name='album',
        inverse_name='artist',
        string='Albums',
    )
    num_albums = fields.Integer(compute='_get_num_albums', store=False)

    @api.multi
    def _get_num_albums(self):
        for artist in self:
            artist.num_albums = len(artist.albums)

    # ...

Или без добавления дополнительныхполя, вы можете использовать search_count, чтобы получить количество альбомов исполнителя:

class Artist(models.Model):
    _name = 'artist'
    _order = 'name'

    # ...
    num_albums = fields.Integer(compute='_get_num_albums', store=False)

    @api.multi
    def _get_num_albums(self):
        album_obj = self.env['album']
        for artist in self:
            artist.num_albums = album_obj.search_count([
                ('artist', '=', artist.id),
            ])
    # ...
...