Вызов @api в заголовке функции - PullRequest
0 голосов
/ 11 октября 2018

Итак, я работаю над этим объектом, где он наследует от другого объекта ODOO v8

class a(models.Model):
_inherit = 'my.inherit.object'

@api.multi
def _default_group(self):
    domain = {'group_id': [('id', 'in', False)]}
    user_c = self.env['timetable'].search([
        # ('company_id', '=', self.env.user.company_id.id),
        ('year_id', '=', self.year_id),
        ('user_id', '=', self.user_id.id), ])
    if not teacher:
        raise exceptions.ValidationError(_("you haven't access, sorry so contact your administrator"))

    groups = []
    for line_groups in user_c:
        if line_groups.cd_id == self.cd_id:
            groups.append(line_groups.group_id.id)
        domain['group_id'] = [('id', 'in', groups)]


    return {'domain': domain}

, поэтому, когда я пытаюсь запустить этот тестовый код, он показывает мне эту ошибку

Expected singleton: my.inherit.object ('lang', 'tz', 'params', 'uid', 'active_model')

Что я могу сделать, чтобы это исправить, все поля работают, а также обработка работает нормально, но она останавливается и показывает ошибку.

Ответы [ 3 ]

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

Попробуйте это:

for line_groups in user_c:
    for rec in self:
        if line_groups.cd_id == rec.cd_id:
            groups.append(line_groups.group_id.id)
    domain['group_id'] = [('id', 'in', groups)]
0 голосов
/ 11 октября 2018

Если ваш метод _default_group используется как метод по умолчанию - получение значений по умолчанию для поля - self - пустой набор записей.Но вы используете self как синглтон, например, в ('year_id', '=', self.year_id).Это не сработает.Чтобы получить такие значения, как год или что-либо другое в методах значений по умолчанию, вам нужно найти способ обойти self.

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

self.ensure_one сделано для того, чтобы обеспечить передачу только одной записи.Он проверяет, что текущая запись является одиночной (поэтому только одна запись, а не несколько записей).

Если self содержит несколько записей, система выдаст ошибку.

Вы можете попробовать сследующий код:

@api.multi
def _default_group(self):
    self.ensure_one()
    # your logic start from here
...