1👍
This is normal Python behaviour.
When you import a submodule, that submodule is set as an attribute on the parent module. In this case, when simplelib.models
is imported, the models
submodule is set on the parent module simplelib
. The parent module namespace is the same as that module’s __init__.py
global namespace. This will overwrite the old value.
If you put simplelib
as the first entry in INSTALLED_APPS
, its models
submodule will be the first models module imported by Django. This will replace the simplelib.models
attribute before any model fires the class_prepared
signal. On the other hand, if you put simplelib
at the end of INSTALLED_APPS
, Django will load simpellib.models
as the last models module. Any models that are imported before that will fire the class_prepared
signal before simplelib.models
is imported, and before the models
attribute is replaced with the submodule.