如何对具有重复名称的模型中的数据进行分组 Python Odoo

How to group data from a model with repeating names Python Odoo

我的 Odoo 模型有重复值。 如何对具有重复名称的模型中的数据进行分组。 我需要得到这样的数据格式

Administrator : name Administrator age 33  
                name Administrator age 43
                name Administrator age 32
Sam: name Sam age 31
     name Sam age 22
     name Sam age 32
     name Sam age 12
Anastatia : name Anastasia age 44
            name Anastasia age 55
            ...

.py

class FirstTestModel(models.Model):
    _name = "first.model"
    _inherit = ['mail.thread', 'mail.activity.mixin']
    _description = "Test Model"

    name = fields.Char(string='Name', required=True, )
    age = fields.Integer(string='Age', )

    def action_calculate(self):
        search = self.search([])
        for all_values in search:
            string_name_age = "%s : %s" % (all_values.name, str(all_values.age))
            print(string_name_age)

数据库中的用户列表

当我转到用户页面时,我有一个计算按钮。当我点击它时,我得到 Python 终端数据

.xml

<record id="first_form" model="ir.ui.view">
        <field name="name">first.model.form</field>
        <field name="model">first.model</field>
        <field name="arch" type="xml">
            <form>
                <header>
                    <button id="button_calculate" name="action_calculate" string="Calculate" class="btn-primary" type="object"/>

重点是从数据库中获取所有相同的名字,按年龄排序,然后分组。例如,所有管理员名称必须是一个组。

 Administrator : name Administrator age 35
             name Administrator age 37
             name Administrator age 56
             name Administrator age 66
Sam : name Sam age 13
      name Sam age 22
      name Sam age 32
      name Sam age 55
      name Sam age 62

等等。

然后我会将这些数据传输到 Odoo 中的页面 我刚开始学习 Python 和 odoo

下面的代码可能会给出类似的输出,但让我好奇的是您需要它的原因。请让我们知道您想要实现的目标,以便我们更好地提供帮助

def action_calculate(self):
    search = self.search([])
    string_name_age = ""
    for all_values in search:
        same_name_items = self.search([("name","=",all_values.name)], order="age asc")
        string_name_age += all_values.name + " :"
        for items in same_name_items:
            string_name_age += "name: %s  age %s \n" % (items.name, str(items.age))
    print(string_name_age)

我更改了代码,通过过滤方法,对数据库的请求不会那么多。

我的代码:

def action_calculate(self):
    search = self.search([])
    string_name_age = ""
    name_done = []
    for all_values in search:
        if all_values.name not in name_done:
            same_name_items = search.filtered(lambda lm: lm.name == all_values.name).sorted(key=lambda r: r.age)
            string_name_age += all_values.name + " :"
            for items in same_name_items:
                string_name_age += "name: %s  age %s \n" % (items.name, str(items.age))
            name_done.append(all_values.name)

    print(string_name_age)
    self.message_post(body=string_name_age)

这是有效的。