2015-04-13 2 views
2

У меня возникла странная проблема. Это мое мнение:Проблема с Django (кеш ?!)


def get_date_range(this_week=True, last_week=False, older_than_two_weeks=False): 

    dates = {} 
    d = datetime.today().strftime('%Y-%m-%d') 
    dt = datetime.strptime(d, '%Y-%m-%d') 
    if this_week: 
     this_week_start = dt - timedelta(days = dt.weekday()) 
     this_week_end = this_week_start + timedelta(days=6) 
    elif (last_week or older_than_two_weeks): 
     this_week_start = dt - timedelta(days = 14) 
     this_week_end = this_week_start + timedelta(days=6) 

    dates = {'date_start' :this_week_start, 'date_end' : this_week_end} 
    return dates 

def load_created_topics_by_time(request): 
    """ 
    created this week, last week, older 
    """ 
    objects={} 

    date_range = get_date_range(this_week=True) 
    topics_this_week = Topic.objects 
         .filter(is_active=True, date_created__range=(date_range['date_start'],date_range['date_end'])) 
         .order_by('-date_created') 

    objects['topics_this_week'] = topics_this_week 

    date_range = get_date_range(this_week=False,last_week=True) 
    topics_last_week = Topic.objects.filter(is_active=True, date_created__range= (date_range['date_start'],date_range['date_end'])).order_by('-date_created') 

    objects['topics_last_week'] = topics_last_week 

    topics_older_two_weeks = Topic.objects.filter(is_active=True, date_created__lt=date_range['date_start']).order_by('-date_created')[:50] 

    objects['topics_older_two_weeks'] = topics_older_two_weeks 

    return shortcuts.render(request, 'template.html', objects) 

Теперь, когда я запустить его на моей машине он работает отлично, но загружается с сервера, по-видимому попадает в «get_date_range» только один раз. Похоже, что результат этой функции получает кеширование, и это, конечно, испортило мои результаты.

Я не могу использовать @never_cache, потому что это функция, а не вид. Любые решения?

Спасибо, Дэвид

+0

Действительно ли это ваш точный код? Вы уверены, что вызываете функцию get_date_range из вида load_created_topics_by_time? –

+0

Да, это точный код. оба вызова функции находятся в пределах load_created_topics_by_time – Dave

+0

Почему вы не можете использовать '@ never_cache'? Отображается представление, которое вызывает функцию, поэтому функция вызывается только один раз. – Wallace

ответ

0

Я столкнулся с точно такой же проблемой, и это сводило меня с ума!

Это (или, по крайней мере, для меня) проблема с кэшированием на уровне QuerySet. После нескольких дней проб и ошибок я, наконец, занялся этим, используя общие представления на основе классов и выполнив логику «зависящую от даты» внутри метода get_queryset пользовательского диспетчера моделей (https://docs.djangoproject.com/en/1.8/topics/db/managers/#custom-managers).

Кроме того, я не уверен, что это потому, что я «выучил мой урок» или связан с коммутатором, но кажется, что проблема возникает реже, поскольку я переключился с apache + mod_wsgi на nginx + скомпилированный uWSGI (тот факт, что он скомпилирован вручную, не тот момент, это просто означает, что я использую последнюю версию, а не ту, которая предоставляется моим дистрибутивом).

Надеюсь, что этот ответ будет полезен.

 Смежные вопросы

  • Нет связанных вопросов^_^