2012-05-11 2 views
1

Я знаю о кешнике Джонни MAN_IN_BLACKLIST и JOHNNY_TABLE_BLACKLIST. Есть ли способ указать обратное? Это указать только таблицы, которые необходимо кэшировать? Я хочу сделать это по той простой причине, что у нас более 200 таблиц в приложении, и я хочу кэшировать несколько и не хочу, чтобы мой MAN_IN_BLACKLIST был действительно огромным.Кэш Django Johnny - включить таблицы вместо исключения с помощью MAN_IN_BLACKLIST?

Спасибо,

ответ

1

Вместо написания таблиц явно, я боюсь, что вам нужно взломать johnny/cache.py, в основном линии содержит blacklist_match. Самый простой способ изменить функцию blacklist_match непосредственно:

# set WHITELIST in johnny/settings.py, just as BLACKLIST 
WHITELIST = getattr(settings, 'MAN_IN_WHITELIST', 
      getattr(settings, 'JOHNNY_TABLE_WHITELIST', [])) 
WHITELIST = set(WHITELIST) 

def blacklist_match(*tables): 
    return not WHITELIST.issuperset(tables) or \ 
      bool(settings.BLACKLIST.intersection(tables)) 
+0

ОК, спасибо. Я также вижу, что если я запускаю необработанный запрос выбора, используя django db connection/cursor, он, похоже, не кэширует результат. Это по дизайну? Или можно кэшировать эти результаты? – ksrini

+0

@ksrini Да, Johnny monkey-patches sqlcompiler для обычного запроса и не завершает 'QuerySet.raw()' и 'db.cursor()'. – okm

0

В версии 1.4 Джонни Кэш фактически поддерживает белые списки. Добавить JOHNNY_TABLE_WHITELIST в настройки и присвоить ему список таблиц вы хотите кэшировать и т.д .:

JOHNNY_TABLE_WHITELIST = ['appname_tablename', 'someotherapp_differenttable'] 

source

+0

Отлично! Спасибо за обновление. – ksrini