У меня есть модуль pagetypes.py
, который извлекает пару констант (я не должен использовать слово константу здесь) из БД для последующего повторного использования:
def _get_page_type_(type):
return PageType.objects.get(type=type)
PAGE_TYPE_MAIN = _get_page_type_('Main')
PAGE_TYPE_OTHER = _get_page_type_('Other')
затем где-то в представлениях Ido:
import pagetypes
...
print pagetypes.PAGE_TYPE_MAIN #simplified
Все работает нормально, когда в db есть эти записи, и я уверен, что так и есть ... если этот код не тестируется.В этом случае я хочу загрузить эти записи в БД через светильники.Проблема в том, что приборы не загружаются (даже syncdb
не запускается) к моменту импорта модуля pagetypes, что приводит к сбою _get_page_type_
с:
psycopg2.ProgrammingError: relation "pagetype" does not exist
Тестовый исполнитель всегда пытается импортироватьМодуль pagetypes
, потому что он импортируется проверяемым представлением.
Как мне обойти эту проблему?
Я думал о ленивой загрузке констант типа страницы PAGE_TYPE_MAIN
, PAGE_TYPE_OTHER
, но потом я хочу, чтобы она провалилась раньше, если эти записи не находятся вдБ (или приборы, если тестируются), поэтому я не знаю, как это реализовать.
Я также думал о кэшировании на уровне объектов и просто вызывал PageType.objects.get(type=type)
всякий раз, когда используется / вызывается константа, ноне будет ли это излишним?Вызов orm без кэша приведет к слишком большому количеству вызовов в БД, которые я хочу предотвратить.
Это должно быть что-то очень простое, но я не могу решить это.; -)