Django получить модели по имени модели

В Django я знаю, что существует одна и только одна модель с именем foo, но я не знаю приложения, в котором зарегистрирована эта модель! Как я могу получить модель только с именем model_name?

Как показывают ответы на Django: Get model from string? показывают, что для получения модели из строки вам нужна либо app_name строка, либо AppConfig объект model_name.

Однако, вы можете использовать apps.get_app_configs() для итерации над AppConfig экземплярами, так что возможно что-то вроде этого:

from django.apps import apps

for app_conf in apps.get_app_configs():
    try:
        foo_model = app_conf.get_model('foo')
        break # stop as soon as it is found
    except LookupError:
        # no such model in this application
        pass

Обратите внимание, что эта итерация будет включать базовые приложения django, которые находятся в INSTALLED_APPS, такие как admin, auth, contenttypes, sessions, messages и staticfiles.

Вернуться на верх