如何在现有记录odoo上运行compute

如何在现有记录odoo上运行compute,odoo,Odoo,我已经添加了一个名为“佣金总额”的字段,它将记录id作为佣金总额计算字段,当任何依赖字段发生变化时,该字段工作正常,但我需要在所有旧日期运行该函数,而不是在创建新的更改依赖字段时运行该函数 @api.depends('agents','order_line') def _compute_commission_total(self): total = 0 for agent in self.agents: total += agent.agent_commissio

我已经添加了一个名为“
佣金总额”
的字段,它将记录id作为佣金总额计算字段,当任何依赖字段发生变化时,该字段工作正常,但我需要在所有旧日期运行该函数,而不是在创建新的更改依赖字段时运行该函数

@api.depends('agents','order_line')
def _compute_commission_total(self):
    total = 0
    for agent in self.agents:
        total += agent.agent_commission
    self.commission_total = total
    _logger.info("COmmisssion total++++++++++++++++++++++++++++")
    _logger.info(self.commission_total)

您可以使用位于以下路径中的Odoo服务器操作

Settings → Technical → Actions → Server Actions
创建一个新操作,并确保字段Model设置为正确的模型,字段action to Do设置为Execute Python CodePython Code字段将是您的代码。这将类似于以下内容:

all_records=env['Model Name'].search([('Add the preferred domain'))#您将获得所有记录
对于所有_记录中的项目:
项目。计算佣金总额()
#或者按照@Dipen Shah的建议,您可以使用
#在上下文中可用的单词“records”
对于记录中的项目:
项目。计算佣金总额()
请注意,上下文中有以下可用变量:

  • env:触发操作的Odoo环境
  • 模型:触发操作的记录的Odoo模型;是一个无效的记录集
  • 记录:触发操作的记录;可能是无效的
  • 记录:在多模式下触发操作的所有记录的记录集;可能是无效的
  • 有用的Python库,如时间日期时间日期工具时区
  • log:log(message,level='info'):在ir.logging表中记录调试信息的日志功能
  • 警告:与raise一起使用的警告异常
如果您希望此类操作成为模块中的源代码。它将是一个xml文件。它可能位于
数据
文件夹中。它看起来像:


重新计算字段
ir.actions.server
代码
对于记录中的项目:
项目。计算佣金总额()
或者您可以将其设置为
计划的操作

根据您的最新评论,如果您想在现有的生产数据库上应用此功能,请从您的模块中执行,而不是手动执行。您必须使用模块版本控制,该版本控制可在
\uuuu manifest\uuuu.py
文件中找到。因此,您将增加模块版本号。然后根据以下网站的建议添加
migrations
文件夹:


你可以试试这个。让我们知道它是否工作。

您可以使用位于以下路径中的Odoo服务器操作

Settings → Technical → Actions → Server Actions
创建一个新操作,并确保字段Model设置为正确的模型,字段action to Do设置为Execute Python CodePython Code字段将是您的代码。这将类似于以下内容:

all_records=env['Model Name'].search([('Add the preferred domain'))#您将获得所有记录
对于所有_记录中的项目:
项目。计算佣金总额()
#或者按照@Dipen Shah的建议,您可以使用
#在上下文中可用的单词“records”
对于记录中的项目:
项目。计算佣金总额()
请注意,上下文中有以下可用变量:

  • env:触发操作的Odoo环境
  • 模型:触发操作的记录的Odoo模型;是一个无效的记录集
  • 记录:触发操作的记录;可能是无效的
  • 记录:在多模式下触发操作的所有记录的记录集;可能是无效的
  • 有用的Python库,如时间日期时间日期工具时区
  • log:log(message,level='info'):在ir.logging表中记录调试信息的日志功能
  • 警告:与raise一起使用的警告异常
如果您希望此类操作成为模块中的源代码。它将是一个xml文件。它可能位于
数据
文件夹中。它看起来像:


重新计算字段
ir.actions.server
代码
对于记录中的项目:
项目。计算佣金总额()
或者您可以将其设置为
计划的操作

根据您的最新评论,如果您想在现有的生产数据库上应用此功能,请从您的模块中执行,而不是手动执行。您必须使用模块版本控制,该版本控制可在
\uuuu manifest\uuuu.py
文件中找到。因此,您将增加模块版本号。然后根据以下网站的建议添加
migrations
文件夹:


你可以试试这个。让我们知道它是否工作。

重新计算字段的方法是:

  • 删除相应的数据库列。您可以使用psql运行ALTER TABLE命令
  • 运行模块升级

  • 我发现这更容易记住,如果您有数据库访问权限,则更容易实现。

    重新计算字段的方法是:

  • 删除相应的数据库列。您可以使用psql运行ALTER TABLE命令
  • 运行模块升级

  • 我发现这更容易记住,如果您有数据库访问权限,则更容易实现。

    关于服务器操作,您可以更好地与记录一起使用,并且可以直接从记录中触发该方法。无需重新创建环境并从此处进行搜索。我想在自定义模块中编写服务器操作?我不想手动创建。当我升级要重新计算的模块时。ThanksOn服务器操作,您可以更好地与记录一起使用,并且可以直接从记录中触发该方法。无需重新创建环境并从此处进行搜索。我想在自定义模块中编写服务器操作?我不想手工制作。