我有一个奇怪的问题。这是我的观点:
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 :(得分:0)
我遇到了同样的问题而且它让我发疯了!
在QuerySet级别是(或者至少对我而言)缓存问题。经过几天的反复试验,我最终通过使用基于类的通用视图并在自定义模型管理器(https://docs.djangoproject.com/en/1.8/topics/db/managers/#custom-managers)的get_queryset
方法中执行“与日期相关的”逻辑来解决这个问题。 / p>
另外,我不确定是不是因为我“吸取了教训”或者它与开关有关但似乎问题似乎不那么频繁,因为我已经从apache + mod_wsgi切换到nginx +手工编译uWSGI(手工编译的事实不是重点,它只是意味着我使用的是最新版本,而不是我的发行版提供的版本)。
希望这个答案有所帮助。