所以我默认尝试填写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")
答案 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了解有关方法装饰器的更多信息。