在 odoo 9 中使用 mapped()

Use mapped() in odoo 9

映射了什么以及如何在 odoo 9 中使用它?

有什么简单的例子吗?

在官方页面停留:

# returns a list of names
records.mapped('name')

# returns a recordset of partners
record.mapped('partner_id')

# returns the union of all partner banks, with duplicates removed
record.mapped('partner_id.bank_ids')

基本上它是 return 记录集(对象或值的列表)的便捷方法。假设您想要一个包含与特定域匹配的所有合作伙伴电子邮件地址的列表。您可以像这样轻松完成此操作。

domain = [('email','not in',[False,None])]
records = self.env['res.partner'].search(domain)
email_list = records.mapped('email')

print(email_list)
>>> [u'john@gmail.com',u'suzy@gmail.com',u'bob@hotmail.com']

这样你就不需要这样做了

email_list = []
domain = [('email','not in',[False,None])]
for rec in self.env['res.partner'].search(domain):
    if rec.email: 
        email_list.append(rec.email) 
print(email_list)
>>> [u'john@gmail.com',u'suzy@gmail.com',u'bob@hotmail.com']

在上面的示例中,odoo 将遍历所有记录并return以列表的形式从每个记录中编辑电子邮件。

因此,与其遍历所有记录以从每条记录中获取相同的字段,不如使用映射。