为什么帐户模块升级会取消某些表上的记录链接?

2023-12-26

我只是想确保升级base or account模块一切正常,因为如果我对模块进行新的更改,我想将来升级数据库。

我已在模型上手动创建新记录account.acount.type。但是当我尝试升级时account模块中,出现了写在这个问题底部的异常。 Odoo 正在尝试从该模型中删除记录。为什么会发生这种情况?

我已经安装了帐户模块,但我没有从该表中删除任何记录,我只是添加了一些类型。所以使用数据升级模块的预期行为是 https://www.odoo.com/forum/help-1/question/what-does-noupdate-mean-in-the-following-xml-statement-data-noupdate-1-88009:

noupdate 表示当该模块第二次升级时,该记录不会再次更新。 noupdate="1" 内的记录仅在安装时才会初始化。

Tip:如果您删除了记录,那么在下次更新时系统将重新创建它。通常是那些有可能从前端修改的记录,在 noupdate=1 中给出。例如,自动调度程序记录。

<data noupdate="1">
    <!-- account.account.type -->
    <record model="account.account.type" id="data_account_type_receivable">
        <field name="name">Receivable</field>
        <field name="type">receivable</field>
        <field name="include_initial_balance" eval="True"/>
    </record>

    <!-- [...]  -->

这是升级帐户模块时日志上出现的错误

2018-12-11 20:35:31,729 18018 INFO db_name odoo.addons.base.ir.ir_model: Deleting [email protected] /cdn-cgi/l/email-protection (l10n_es.account_type_third_parties)
2018-12-11 20:35:31,760 18018 ERROR db_name odoo.sql_db: bad query: b'DELETE FROM account_account_type WHERE id IN (59)'
ERROR: null value in column "user_type_id" violates not-null constraint
DETAIL:  Failing row contains (14927, Account name or description, null, 4, f, null, other, null, f, null, 1, null, 1, 2018-12-11 18:10:24.091826, 1, 2018-12-11 18:10:24.091826, t).
CONTEXT:  SQL statement "UPDATE ONLY "public"."account_account" SET "user_type_id" = NULL WHERE $1 OPERATOR(pg_catalog.=) "user_type_id""
2018-12-11 20:35:31,763 18018 WARNING db_name odoo.modules.loading: Transient module states were reset
2018-12-11 20:35:31,763 18018 ERROR db_name odoo.modules.registry: Failed to load registry
Traceback (most recent call last):
  File "/path/to/odoo/src/modules/registry.py", line 85, in new
    odoo.modules.load_modules(registry._db, force_demo, status, update_module)
  File "/path/to/odoo/src/modules/loading.py", line 414, in load_modules
    env['ir.model.data']._process_end(processed_modules)
  File "/path/to/odoo/src/linked/base/ir/ir_model.py", line 1628, in _process_end
    record.unlink()
  File "/path/to/odoo/src/models.py", line 2935, in unlink
    cr.execute(query, (sub_ids,))
  File "/path/to/odoo/src/sql_db.py", line 155, in wrapper
    return f(self, *args, **kwargs)
  File "/path/to/odoo/src/sql_db.py", line 232, in execute
    res = self._obj.execute(query, params)
psycopg2.IntegrityError: null value in column "user_type_id" violates not-null constraint
This is raised because the account type is being used by some account.

问题

  • 那么唯一的解决方案是使用现有的帐户类型而不是创建新帐户类型?

  • 源代码中是否有某个位置执行此取消链接操作?有人知道吗?

  • 这是正常行为吗?

Note:我已经从头开始手动导入会计科目表


这应该是正常行为,尤其是对于account.account.typeIIRC 根本不是特殊的模型。

在模块更新时,odoo 总是删除不存在的外部 ID 的记录。在这种情况下,什么是不存在的外部 ID?它们是系统中的外部 ID,例如您的l10n_es.account_type_third_parties不再在模块中(此处为 l10n_es)。

实际上,这对于 odoo 开发人员来说是非常重要的信息。我不确定它是否在文档中。

关于代码:它正在发生here https://github.com/odoo/odoo/blob/7e5d5045bfa7752176dd8f19c546ff6b19841381/odoo/addons/base/ir/ir_model.py#L1604-L1633

@api.model
def _process_end(self, modules):
    """ Clear records removed from updated module data.
    This method is called at the end of the module loading process.
    It is meant to removed records that are no longer present in the
    updated data. Such records are recognised as the one with an xml id
    and a module in ir_model_data and noupdate set to false, but not
    present in self.loads.
    """
    if not modules or tools.config.get('import_partial'):
        return True

    bad_imd_ids = []
    self = self.with_context({MODULE_UNINSTALL_FLAG: True})

    query = """ SELECT id, name, model, res_id, module FROM ir_model_data
                WHERE module IN %s AND res_id IS NOT NULL AND noupdate=%s ORDER BY id DESC
            """
    self._cr.execute(query, (tuple(modules), False))
    for (id, name, model, res_id, module) in self._cr.fetchall():
        if (module, name) not in self.loads:
            if model in self.env:
                _logger.info('Deleting %s@%s (%s.%s)', res_id, model, module, name)
                record = self.env[model].browse(res_id)
                if record.exists():
                    record.unlink()
                else:
                    bad_imd_ids.append(id)
    if bad_imd_ids:
        self.browse(bad_imd_ids).unlink()
    self.loads.clear()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么帐户模块升级会取消某些表上的记录链接? 的相关文章

随机推荐

  • 如何使 Protobuf 3 字段成为必填字段?

    我正在使用 GRPC proto buffers 在 GoLang 中编写我的第一个 API 端点 我对 Go 还很陌生 以下是我为测试用例编写的文件 package my package import context testing gi
  • 未找到 Mysqli 类。使用percona、php5-fpm、nginx、phalcon

    Fatal error Class TKStdlib mysqli not found in var www tk browser app application library tk stdlib DbAbstract php on li
  • 如何在rails中自定义bulma变量

    我正在使用 bulmarails gem 我想自定义它使用的一些变量 特别是字体颜色 根据布尔玛文档http bulma io documentation overview customize http bulma io documenta
  • Kubernetes 服务到底是什么以及它们与部署有何不同

    在阅读了这样的 Kubernetes 文档后 部署 https kubernetes io docs concepts workloads controllers deployment service https kubernetes io
  • 检查渲染方法

    我正在使用react redux 和react redux router 当我运行应用程序时 出现错误 我不明白它与我的 App js 中的 React 渲染函数有什么关系 在我看来 问题出在代码的其他地方 错误如下 Warning Rea
  • 如何在“map”对象中编写 OpenAPI 3 (Swagger) 规范的属性名称?

    我试图描述的 API 具有一个结构 其中根对象可以包含任意数量的子对象 属性本身就是对象 根对象中的 键 或属性是子对象的唯一标识符 值是子对象的其余数据 child1 bunch of stuff child2 bunch of stuf
  • Oracle 的 C# 参数化查询 - 严重且危险的错误!

    这绝对是一个嚎叫 我不敢相信自己的眼睛 而且我不敢相信 如果这是 C 中的一个真正的错误 那么在我之前没有人会发现这一点 所以我将其发布给开发人员社区的其他成员 让他们告诉我我做错了什么 我确信这个问题会让我说 DOH 然后用手掌用力拍打我
  • 将列中的任意字符串替换为 1

    我正在和熊猫一起工作 我的目标是将数据帧中包含 NaN 或字符串数 据的几列转换为或多或少的虚拟变量 0 代表 NaN 1 代表任何字符串 我想在不使用完整的字符串列表并替换它们的情况下执行此操作 因为存在拼写错误 这会导致错误 我已经能够
  • 通过 api.linkedin.com/v2/shares 检索共享时排序不正确

    根据文档 https learn microsoft com en us linkedin marketing integrations community management shares share api retrieve shar
  • DPDK RX/TX 回调示例应用程序中没有流量出现

    我是DPDK领域的新生 我从 DPDK 主页给出的示例应用程序开始 我被这个例子困住了 DPDK RX TX 回调示例应用程序 https doc dpdk org guides sample app ug rxtx callbacks h
  • Android检测webview URL变化

    我的 android 应用程序中有一个 webview 希望检测 url 何时发生变化 我想用它来当用户位于 info php 页面上时隐藏顶部栏中的信息按钮 并在用户不在 info php 页面上时再次显示该按钮 我用谷歌搜索但找不到任何
  • 如何将数组数据从javascript发送到flask

    如何将数组从 javascript 发送到 python Flask ajax 没有将数组 值 返回到 Flask 路由 任何人都可以帮助解决这些错误 flask route app route admin methods POST GET
  • 将 PHP 5.3 匿名函数转换为 5.2 兼容函数

    我在另一个函数中有这个匿名函数 build tree 它在 PHP 5 3 中运行良好 function nest list list index array index nodes list index build tree functi
  • Git Stash 的新分支会影响其他存储吗?

    我在主分支上存储了多个更改 现在我想从位于 0 的存储更改创建一个新分支 但我怀疑新分支的创建不会影响我的其他存储 因为git创建新分支后会丢弃我的藏品 将要git只删除 0 索引处的存储 还是会删除所有存储 隐藏的更改对我来说太重要了 简
  • PC寄存器上的ARM LDR指令

    我是这样理解这个故事的 PC寄存器保存指向下一条指令的指针 LDR指令正在将第二个操作数的值加载到第一个操作数中 例如 LDR r0 pc 0x5678 相当于这个 C代码 r0 pc 0x5678 它是带有基址偏移量的指针解引用 我的问题
  • 如何测试MySQL查询速度,同时减少不一致?

    我需要一种简单的方法来测试 SQL 查询的速度 我不担心硬件差异 我基本上需要一个相对数字 这就是我一直在用 PHP 做的事情 它很模糊 但有效 CONNECT TO DB HERE sub new YomoSubscription 95
  • 为什么我们使用输入隐藏权重矩阵而不是隐藏输出权重矩阵作为词向量?

    在word2vec中 经过训练 我们得到两个权重矩阵 1 输入隐藏权重矩阵 2 隐藏输出权重矩阵 人们会使用输入隐藏权重矩阵作为词向量 每一行对应一个词 即词向量 这是我的困惑 为什么人们使用输入隐藏权重矩阵而不是隐藏输出权重矩阵作为词向量
  • 错误:类型“数字”无法分配给类型“十进制”

    我想手动创建 Prisma 架构的对象 const order Order id 1 name Name price 99 Somewhere in autogenerated file by Prisma export type Orde
  • RecyclerView - 如何获取每行视图的引用

    我正在使用新的RecyclerView取代我现有的ListViews并遇到了以下问题 在旧的BaseAdapter 我可以创建一个 飞入 Animation对于适配器内的每个项目 只需应用此Animation to the convertV
  • 为什么帐户模块升级会取消某些表上的记录链接?

    我只是想确保升级base or account模块一切正常 因为如果我对模块进行新的更改 我想将来升级数据库 我已在模型上手动创建新记录account acount type 但是当我尝试升级时account模块中 出现了写在这个问题底部的