在odoo 9中使用mapped()

Poi*_*ter 0 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')
Run Code Online (Sandbox Code Playgroud)

Phi*_*ack 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']
Run Code Online (Sandbox Code Playgroud)

这样您就不需要这样做了

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']
Run Code Online (Sandbox Code Playgroud)

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

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