在odoo 9中使用mapped()

时间:2017-02-14 14:38:00

标签: openerp 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')

1 个答案:

答案 0 :(得分:6)

基本上它是返回记录集(对象或值列表)的便捷方法。假设您想要一个包含与特定域匹配的所有合作伙伴电子邮件地址的列表。你可以很容易地做到这一点。

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会遍历所有记录,并以列表的形式从每条记录中返回电子邮件。

因此,不是循环遍历所有记录,而是从每个可以使用映射的记录中获取相同的字段。

相关问题