Can not clean fields from removed model
If a model is completely removed from the pool, the ir.model.field
can not clean the corresponding fields:
Traceback (most recent call last):
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/ir/model.py", line 124, in clean
pool.get(model)
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/pool.py", line 190, in get
return self._pool[self.database_name][type][name]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
KeyError: 'sale.subscription.box'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/ir/model.py", line 128, in clean
cls.delete([cls(id_)])
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/model/modelsql.py", line 262, in wrapper
return func(cls, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/model/modelsql.py", line 1512, in delete
raise ForeignKeyError(
trytond.model.modelsql.ForeignKeyError: The records could not be deleted because they are used by field "Model" of "Trigger". -
Traceback (most recent call last):
File "/home/ced/Projects/JurassicFruit/.venv/bin/trytond-admin", line 31, in <module>
admin.run(options)
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/admin.py", line 57, in run
pool.init(update=options.update, lang=list(lang),
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/pool.py", line 167, in init
restart = not load_modules(
^^^^^^^^^^^^^
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/modules/__init__.py", line 382, in load_modules
_load_modules(update)
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/modules/__init__.py", line 352, in _load_modules
load_module_graph(graph, pool, update, lang)
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/modules/__init__.py", line 243, in load_module_graph
ModelField.clean()
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/ir/model.py", line 351, in clean
Model = pool.get(model)
^^^^^^^^^^^^^^^
File "/home/ced/Projects/JurassicFruit/.venv/lib/python3.12/site-packages/trytond/pool.py", line 190, in get
return self._pool[self.database_name][type][name]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
KeyError: 'sale.subscription.box'
This should not happen since 8680316c6805 as there is a ON DELETE CASCADE
now thanks to the fmany2one. But it is still good to back-port the fix and avoid to rely only on the cascade behavior.