在函数头上调用@api

时间:2018-10-11 11:11:57

标签: python odoo odoo-8 odoo-10

所以,我正在研究这个对象,他从另一个对象继承 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 :(得分:1)

self.ensure_one用于确保仅传递一条记录。它检查当前记录是否为单例(因此只有一个记录,而不是多个记录)。

如果self将包含多个记录,则系统将引发错误。

您可以尝试以下代码:

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

答案 1 :(得分:0)

尝试一下:

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)]

答案 2 :(得分:0)

如果将方法_default_group用作默认方法-获取字段的默认值-self是空的记录集。但是您在self中将('year_id', '=', self.year_id)用作单例。那行不通。要获取诸如year之类的值或采用默认值方法之类的任何值,您将必须找到一种解决方法self