如何解决如何在现有记录odoo上运行计算
我已经添加了一个名为 commission_total
的字段,它获得了记录ID作为commit_total计算字段,当任何依赖字段发生变化时它都能很好地工作,但是我需要运行该功能在所有旧日期上,而不是在创建新更改时,取决于字段
@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 字段设置为正确的模型,将要做的动作字段设置为 Execute Python Code strong>, Python代码字段就是您的代码。类似于以下内容:
all_records = env['Model Name'].search([('Add the preferred domain')]) # you will get all records
for item in all_records:
item._compute_commission_total()
# or as suggested by @Dipen Shah,you could use
# word `records` as it's available in the context
for item in records:
item._compute_commission_total()
请注意,上下文中存在以下可用变量:
- 环境:Odoo触发操作的环境
- 模型:触发操作的记录的Odoo模型;是无效的记录集
- 记录:触发操作的记录;可能是空的
- 记录:以多种方式触发了操作的所有记录的记录集;可能是空的
- 有用的Python库,例如时间,日期时间, dateutil ,时区
- 日志:log(message,level ='info'):在ir.logging表中记录调试信息的日志功能
- 警告:警告与加薪配合使用的异常
如果您希望将此类操作作为模块中的源代码。这将是一个xml文件。它可能位于data
文件夹中。它看起来像:
<record id="action_to_recompute_fields" model="ir.actions.server">
<field name="name">Recompute the fields</field>
<field name="type">ir.actions.server</field>
<field name="model_id" ref="model_YOUR_MODEL_NAME"/>
<field name="state">code</field>
<field name="code">
for item in records:
item._compute_commission_total()
</field>
</record>
或者您也可以将其设置为Scheduled Actions
根据您的最新评论,如果您想将其应用到现有生产数据库中,请通过您的模块而不是手动进行。您必须使用__manifest__.py
文件中的模块版本控制。因此您将增加模块的版本号。然后根据以下网站的建议添加migrations
文件夹:https://odoo-development.readthedocs.io/en/latest/maintenance/data-migration.html
您可以尝试一下。让我们知道它是否有效。
,一种重新计算字段的方法是:
- 拖放相应的数据库列。您可以使用psql运行ALTER TABLE命令,
- 运行模块升级。
我发现这更容易记住,并且,如果您具有数据库访问权限,则更易于实现。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。