Skip to content

OpenUpgrade migration script fails for donation in 18.0 #150

@olaf-wagner

Description

@olaf-wagner

I'm trying to migrate a customer database from v14 to v18. It fails in the last step to 18.0 in the migration script for the module donation. There is no code in version 17 for donation in the OCA repository yet, but migration to v16 seems to have succeeded.

Module

donation

Describe the bug

Here is a stack trace of the problem:

2026-02-20 18:57:10,194 8471 �[1;31m�[1;49mERROR�[0m natur_v18 odoo.sql_db: bad query: b'SELECT "res_users"."id", (SELECT "account_payment_method_line__exists".id\n                        FROM "account_payment_method_line" AS "account_payment_method_line__exists"\n                        WHERE "account_payment_method_line__exists".id = ("res_users"."context_donation_payment_method_line_id"->\'1\'->>0)::int4) FROM "res_users" WHERE ("res_users"."id" IN (1))'
ERROR: column res_users.context_donation_payment_method_line_id does not exist
LINE 3: ...WHERE "account_payment_method_line__exists".id = ("res_users...
                                                             ^
 
2026-02-20 18:57:10,203 8471 �[1;33m�[1;49mWARNING�[0m natur_v18 odoo.modules.loading: Transient module states were reset 
2026-02-20 18:57:10,205 8471 �[1;31m�[1;49mERROR�[0m natur_v18 odoo.modules.registry: Failed to load registry 
2026-02-20 18:57:10,205 8471 �[1;37m�[1;41mCRITICAL�[0m natur_v18 odoo.service.server: Failed to initialize database `natur_v18`. 
Traceback (most recent call last):
  File "/opt/odoo/lib/odoo/odoo/service/server.py", line 1404, in preload_registries
    registry = Registry.new(dbname, update_module=update_module)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/venv/lib/python3.11/site-packages/decorator.py", line 232, in fun
    return caller(func, *(extras + args), **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/tools/func.py", line 97, in locked
    return func(inst, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/modules/registry.py", line 129, in new
    odoo.modules.load_modules(registry, force_demo, status, update_module)
  File "/opt/odoo/lib/odoo/odoo/modules/loading.py", line 529, in load_modules
    processed_modules += load_marked_modules(env, graph,
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/modules/loading.py", line 402, in load_marked_modules
    loaded, processed = load_module_graph(
                        ^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/modules/loading.py", line 243, in load_module_graph
    registry.init_models(env.cr, model_names, {'module': package.name}, new_install)
  File "/opt/odoo/lib/odoo/odoo/modules/registry.py", line 605, in init_models
    model._auto_init()
  File "/opt/odoo/lib/odoo/odoo/models.py", line 3546, in _auto_init
    new = field.update_db(self, columns)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/fields.py", line 3270, in update_db
    return super(Many2one, self).update_db(model, columns)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/fields.py", line 1099, in update_db
    self.update_db_notnull(model, column)
  File "/opt/odoo/lib/odoo/odoo/fields.py", line 1151, in update_db_notnull
    model._init_column(self.name)
  File "/opt/odoo/lib/odoo/odoo/models.py", line 3462, in _init_column
    value = field.default(self)
            ^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/addons/oca-mirror-donation/donation/models/donation.py", line 103, in <lambda>
    default=lambda self: self.env.user.context_donation_payment_method_line_id,
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/fields.py", line 3114, in __get__
    return super().__get__(records, owner)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/fields.py", line 1275, in __get__
    recs._fetch_field(self)
  File "/opt/odoo/lib/odoo/odoo/models.py", line 4196, in _fetch_field
    self.fetch(fnames)
  File "/opt/odoo/lib/odoo/odoo/models.py", line 4234, in fetch
    fetched = self._fetch_query(query, fields_to_fetch)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/addons/base/models/res_users.py", line 573, in _fetch_query
    records = super()._fetch_query(query, fields)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/models.py", line 4323, in _fetch_query
    rows = self.env.execute_query(query.select(*sql_terms))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/odoo/lib/odoo/odoo/api.py", line 993, in execute_query
    self.cr.execute(query)
  File "/opt/odoo/lib/odoo/odoo/sql_db.py", line 364, in execute
    res = self._obj.execute(query, params)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.errors.UndefinedColumn: column res_users.context_donation_payment_method_line_id does not exist
LINE 3: ...WHERE "account_payment_method_line__exists".id = ("res_users...
                                                             ^

2026-02-20 18:57:10,214 8471 �[1;32m�[1;49mINFO�[0m natur_v18 odoo.service.server: Stopping gracefully 

The failing OpenUpgrade script seems to be openupgrade_scripts/scripts/iap/18.0.1.1/pre-migration.py.

To Reproduce

Affected versions: 18.0

Steps to reproduce the behavior:

  1. Checkout latest OpenUpgrade code branch 18.0 and include in Odoo container
  2. Run OpenUpgrade on a database containing donation data from version 16.

Expected behavior
successful migration/adaption of the database schemas

Additional context
Debian Linux 12.1, Python Python 3.11.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions