Odoo - 遍历字段,获取值并将它们放入新字段

Posted

技术标签:

【中文标题】Odoo - 遍历字段,获取值并将它们放入新字段【英文标题】:Odoo - Iterate through field, take the values and put them in a new field 【发布时间】:2022-01-08 04:55:41 【问题描述】:

嘿,我是 Odoo 自定义和 Python 的新手,我想知道如何遍历字段并将值从字段中取出并将它们放入新字段中。

我要遍历的字段包含多个电子邮件地址。我想遍历这些电子邮件地址字段,收集电子邮件地址并将它们一起存储在一个新字段中。

为此,我需要一个函数。

我要遍历的字段: 我的 One2many 字段包含多个我想要遍历和收集的邮件地址。


field_contacts_customer_info = fields.One2many(
        'contacts.customer.information', 'another_id', string='Contacts for customer information')

我想存储收集到的邮箱地址的字段:

selected_email = fields.Char(string="Mail4Info")

这是我的课: 我想从 mail_contacts 字段中收集所有的电子邮件地址。

    _name = 'contacts.customer.information'
    _rec_name = 'name_contacts'

    name_contacts = fields.Many2one(
        'res.partner', string="Person", domain = [('is_company', '=', False)])

    mail_contacts = fields.Char(
        related = 'name_contacts.email' ,string="Email")

    another_id = fields.Many2one('res.partner', string="AnotherID")

我的尝试:我尝试开始编写一个函数,但我不知道我是否朝着正确的方向前进。我认为我编写了一个函数 get_email,它取决于包含电子邮件地址的字段,并将收集到的电子邮件地址放入一个列表中,我可以将其提供给我的 selected_email 字段。但我不知道如何遍历 mail_contacts 字段并从中获取值(电子邮件)。

@api.depends('field_contacts_customer_info.mail_contacts') 
    def get_email(self):
        list_of_mails = []

谢谢。

【问题讨论】:

【参考方案1】:

您需要遍历 self 这是一个记录集并循环遍历 field_contacts_customer_info 字段以获取 mail_contacts 字段值。

@api.depends('field_contacts_customer_info.mail_contacts')
def get_email(self):
    for record in self:
        record.selected_email = ','.join(info.mail_contacts for info in record.field_contacts_customer_info)

然后将compute属性设置为get_email

selected_email = fields.Char(string="Mail4Info", compute='get_email')

您可以查看 ORM 文档以了解如何使用 computed fields。

【讨论】:

谢谢!如果我理解正确,也许你可以证明:'@api.depends' 密切关注 'field_contacts_customer_info.mail_contacts' - 字段,并在 ist 更改时触发。当 '@api.depends' 被触发时,函数 get_email 被调用,它有参数 self,它代表我类中的一个对象。对于每条记录,因此在这种情况下,对于每个电子邮件地址,我们通过说 record.selected_email 将记录添加到 selected_email - 字段中,然后我有点迷失了逗号分隔记录。也许你可以解释一下后面的部分,以便我理解。 是的,self 可以表示多条记录。我使用逗号只是为了分隔电子邮件地址。 get_email 方法必须将计算值分配给字段。 谢谢!我还有一个问题。您使用了“信息”。那是从哪里来的,它有什么作用或代表什么? 它代表一个contacts.customer.information 记录。我使用了generator comprehension 并使用info 变量名迭代field_contacts_customer_info 这个答案对你有帮助吗?

以上是关于Odoo - 遍历字段,获取值并将它们放入新字段的主要内容,如果未能解决你的问题,请参考以下文章

从文本字段中获取值并将它们存储在Objective-C中的字典中

如何使用 jQuery 获取复选框的值并将它们吐到不同的表单字段中

如何在 Python 中解析 JSON 并将 2 个字段放入字典中? [复制]

如何使用 for 循环选择字段值并将它们插入到另一个表中

Postgresql 遍历一个数组字段并将记录用于另一个查询

Jolt 将多个对象转换为具有新字段名称的数组