如何将列表中的数据放入many2many

how to put data from list to many2many

我想把数据表单列表放到many2many

@api.multi
def favorite_menus(self):
......
return popular_words[:3]

并且我尝试显示 many2many 字段 (popular_word 中的数据是 [a,b,c])

menu = fields.Many2many(comodel_name='lunch.order.line', default=lambda self:[self.favorite_menus()])

在 odoo 关系字段中接受一个命令列表,所以如果你的列表是一个命令列表,我认为它应该是好的:

创建方法中使用默认值:

要使用 4 cammond 添加记录,您的列表应包含如下数据:

command 4 告诉odoo把id添加到记录列表的第二位

      [(4, id), (4, id2), .......]

id 是您要添加为整数值的记录的 ID。

如果要创建新记录,请使用 0 命令:

         [(0, 0, {'field_name': value_name, 'field_2': value_2 }) , ...]

命令 0 告诉 odoo 从字典的最后位置创建一条记录

你不需要默认值,而是需要一个默认域:

menu = fields.Many2many(
    comodel_name='lunch.order.line',
    domain=lambda self:self.favorite_menus())

@api.multi
def favorite_menus(self):
    """ return a default domain."""
    # first calculate the list of the menu that you want
    # the user to select one of them i'm assuming that you use search
    # so the result is a recordSet of menu 
    menus = .....

    return "[('id', 'in', '%s')]" % (tuple(menus.ids), ) # keep the comma 
    # or try this i think bouth work
    return [('id', 'in', menus.ids)]

注意:您可能需要更改域以满足您的需要。 但要防止用户选择您需要过滤的其他元素 他们在 m2m 或 o2m 或 m2o 领域使用域。