Получить список всех установленных приложений в Django и их атрибутах

На моем сайте Django я создаю класс, который динамически взаимодействует с другими приложениями, установленными на веб-сайте. Я должен делать манипуляции в каждом поле каждого приложения.

Поэтому я хочу сохранить имя всех установленных приложений в списке и получить атрибуты каждого из них. Есть ли способ сделать это, используя итератор или что-то еще?

  • Как преобразовать OrderedDict в обычный dict в python3
  • Как правильно выровнять числовые данные в Python?
  • Есть ли функция библиотеки Python, которая пытается угадать кодировку символов некоторых байтов?
  • Pandas: Примените функцию через «Столбец A», одновременно прочитав «Столбец B»,
  • Python Словарь Понимание
  • Есть ли способ получить ваш адрес электронной почты после аутентификации с помощью Gmail с помощью Oauth?
  • Как обернуть код / ​​текст в ноутбуках Jupyter
  • python - os.makedirs не понимают ~ на моем пути?
  • 5 Solutions collect form web for “Получить список всех установленных приложений в Django и их атрибутах”

    В разделе Django 1.6 и ниже.

    Если вы хотите все модели, попробуйте:

     from django.db.models import get_models for model in get_models(): # Do something with your model here print model.__name__, [x.name for x in model._meta.fields] 

    В Django 1.7 и выше (спасибо Колин Андерсон):

     from django.apps import apps apps.get_models() 

    Я считаю, что более старая функция все еще работает.

    [редактировать]

    Поскольку Django 1.7, доступ к settings.INSTALLED_APPS не рекомендуется: « Ваш код никогда не должен иметь доступ к INSTALLED_APPS напрямую. Вместо этого используйте django.apps.apps ». – johanno

    Итак, благословенный путь:

     from django.apps import apps for app in apps.get_app_configs(): print(app.verbose_name, ":") for model in app.get_models(): print("\t", model) 

    Старая версия этого ответа:

    Все приложения зарегистрированы в файле settings.py .

     In [1]: from django.conf import settings In [2]: print(settings.INSTALLED_APPS) ['django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'raven.contrib.django'] 

    Вы можете импортировать каждое приложение и перечислить его атрибуты:

     In [3]: from pprint import pprint In [4]: for app_name in settings.INSTALLED_APPS: try: module_ = __import__(app_name) except ImportError: pass map(print, ['=' * 80, "MODULE: "+app_name, '-' * 80]) pprint(module_.__dict__) 

    Чтобы использовать новую функцию печати вместо оператора печати в более from __future__ import print_function Python, вам может потребоваться выдача from __future__ import print_function (или просто изменить строку, содержащую вызов print ).

    Список установленных приложений определяется в settings.INSTALLED_APPS . settings.INSTALLED_APPS . Он содержит кортеж строк, поэтому вы можете перебирать его для доступа к имени каждого приложения.

    Однако я не уверен, что вы подразумеваете под атрибутами и полями каждого приложения.

    Вы можете загрузить установленные приложения (в интерпретаторе):

     >>> import myproject.settings >>> [ app for app in myproject.settings.INSTALLED_APPS if not "django" in app ] ['myapp1', 'myapp2', 'myapp3'] 

    Чтобы получить сами реальные приложения ( не только имена ), вот что я придумал:

     from django.conf import settings from django.utils.module_loading import import_module apps = [import_module(appname) for appname in settings.INSTALLED_APPS] 

    Хотя вы, возможно, захотите сделать некоторую обработку ошибок или фильтрацию.

    Python - лучший язык программирования в мире.