2

所以我试图默认填写一个 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")
4

1 回答 1

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' object has no attribute ' 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以了解有关方法装饰器的更多信息。

于 2017-01-09T10:11:02.533 回答