2

我有一个奇怪的问题。这是我的看法:


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 因为它是一个函数而不是一个视图。有什么解决办法吗?

谢谢,大卫

4

1 回答 1

0

我遇到了完全相同的问题,这让我发疯了!

这是(或至少对我而言)QuerySet 级别的缓存问题。经过几天的反复试验,我终于通过使用基于类的通用视图并在get_queryset自定义模型管理器的方法中执行“日期相关”逻辑来解决它(https://docs.djangoproject.com/en/1.8 /topics/db/managers/#custom-managers)。

另外,我不确定是因为我“吸取了教训”还是与开关有关,但由于我从 apache + mod_wsgi 切换到 nginx + 手动编译的 uWSGI(事实上它是手动编译的不是重点,它只是意味着我使用的是最新版本,而不是我的发行版提供的版本)。

希望这个答案会有所帮助。

于 2015-04-14T06:00:30.530 回答