Модуль Django Reimport при запуске tests.py - PullRequest
0 голосов
/ 10 апреля 2011

Я работаю над приложением Django, которое выполняет некоторые интроспекции класса заранее для всех моделей.

Кажется, это работает нормально, если эти модели определены в models.py, но если я определю их в моемtests.py, __init__.py не видит эти модели.

Цель состоит в том, чтобы иметь словарь уровня модуля, который запускается один раз при загрузке __init__.py:

perms_dict = {}
for cls in Models.__subclasses__():
    add some stuff to perms_dict

Когдапри выполнении тестов этот блок кода запускается дважды, в первый раз он не видит модели в tests.py и второй раз видят модели tests.py.К сожалению, когда функция вызывается в файле __init__.py, она почему-то использует perms_dict из начального запуска и не включает модели из tests.py.

Самое простое решение - этоимпортируйте tests.py изнутри __init__.py, чтобы он знал об этих моделях, но, очевидно, при фактическом использовании это нежелательно.

Репозиторий Git доступен по адресу: git: //github.com/philipkimmey/django-cerberus.git

Спасибо!

1 Ответ

1 голос
/ 10 апреля 2011

Кажется, что ваша основная задача - выполнить код для каждой модели ровно один раз. Для этого есть хорошее решение: class_prepared сигнал от django buildins.

http://docs.djangoproject.com/en/1.3/ref/signals/#class-prepared

Что касается самоанализа заранее, это может быть нежелательно в некоторых обстоятельствах, например, когда классы моделей создаются динамически. Я бы порекомендовал просто загрузить models.py изначально и позволить обработчику сигналов позаботиться об оставшихся классах моделей после их импорта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...