如何对具有重复名称的模型中的数据进行分组 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)
这是有效的。
我的 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)
这是有效的。