在默认情况下填写One2many

时间:2017-01-09 08:25:13

标签: python openerp odoo-9 odoo-10

所以我默认尝试填写One2many列表。我已经定义了一个基本字段,阅读了One2many和Many2many的“特殊命令”,但它似乎没有用于某些原因(没有错误信息或任何错误,只是没有填写它)

我的代码:

@api.one
def _get_competitions(self):
    result = []
    values = {'name': 'test', 'xx_price': 550, 'xx_seats_left': 50, 'xx_attending': True}
    result.append((0, 0, values))
    return result

xx_competitions_attendee = fields.One2many('xx.competition.attendee', 'xx_event_id', string="Competitions", default=_get_competitions)

重做了一点,现在我只是返回一个搜索结果,但仍然没有填写列表:

@api.model
def _get_competitions(self):
    return self.env['xx.competition.attendee'].search([('xx_event_id.id', '=', self._context.get('active_ids')[0])])

xx_competitions_attendee = fields.One2many('xx.competition.attendee', 'xx_event_id', string="Competitions", default=_get_competitions)

我已经在另一个模型中设置了Many2one关系,我不认为我应该在这里发布它是非常重要的,但是要确定:

class CompetitionAttendee(models.Model):
   _name = 'xx.competition.attendee'

   xx_event_id = fields.Many2one('event.event', string="Event")

1 个答案:

答案 0 :(得分:0)

注意:

@api.model
    def _get_competitions(self):
        result = []
        values = {'name': 'test', 'xx_price': 550, 'xx_seats_left': 50, 'xx_attending': True}
        result.append((0, 0, values))
        return result

在上面的例子中,您将获得One2many列表中的值,因为您将值传递给" xx_competitions_attendee"字段

@api.model
def _get_competitions(self):
    return self.env['xx.competition.attendee'].search([('xx_event_id.id', '=', self._context.get('active_ids')[0])])

默认方法将在您要创建记录时调用,因此在上下文中没有任何active_ids,因此字典将返回None。

所以你可能有错误:TypeError:' NoneType'对象没有属性' getitem '

注意:

  

你只需要在感觉到one2many时设置many2one引用   记录。因为One2many字段是由框架自己管理的   它始终是针对many2one引用而生成的   没有在那里指定任何Many2one引用。

values = {'many2one_field' : many2one_ref, 'name': 'test', 'xx_price': 550, 'xx_seats_left': 50, 'xx_attending': True,}

你应该尝试以下,

@api.model
def _get_competitions(self):
    result = []
    values = {'name': 'test', 'xx_price': 550, 'xx_seats_left': 50, 'xx_attending': True}
    result.append((0, 0, values))
    return result
  

你有装饰方法错误的装饰器,以设置默认值   方法必须用@api.model(空白记录集)进行修饰   @api.one始终需要记录集来调用方法。

您可以参考Odoo Docs了解有关方法装饰器的更多信息。