Django查询不刷新

时间:2013-06-03 18:35:27

标签: django django-views

我已经构建了一个Django站点来列出当前和即将发生的服务中断。除非我重新启动Apache服务,否则查询不会刷新。它会抓取我添加的新消息,但存在不一致。

我正在运行以下内容。

  • Apache 2.2
  • Postgres 9.2
  • Django 1.5.1
  • Windows 2008

视图是

class MessageViewMixin(object):

    queryset = Message.objects.filter(message_type__id=1
                 ).filter(inactive=False  
                 ).filter(start_time__range=(now, nextweek)
                 ).order_by('-start_time', '-end_time')
    context_object_name = 'upcoming_list'

    def get_context_data(self, **kwargs):
        context = super(MessageViewMixin, self).get_context_data(**kwargs)
        context['current_list'] = Message.objects.filter(
                            inactive=False
                        ).filter(
                            Q(message_type__id=1) | Q(message_type__id=2)
                        ).filter(
                            Q(end_time__isnull=True) | Q(end_time__gte=now)
                        ).filter(start_time__lte=now
                        ).order_by('-start_time', '-end_time')
    return context

所以coming_list是对下周中断的查询。当中断发生时,消息现在应该属于current_list。除非我重新启动Apache,否则不会发生这种情况。

2 个答案:

答案 0 :(得分:1)

我在博客上发表了关于此问题的信息here

总结一下这篇文章,虽然查询集确实是懒惰的,并且仅在调用视图时进行评估,但now的定义不是。正如Tomita所说,答案是在get_queryset中定义它。

答案 1 :(得分:0)

您描述的行为正是您应该期待的。您将查询放在类定义中。它会立即进行评估并分配给变量queryset

相反,覆盖每次调用的get_queryset ..

def get_queryset(self):
    return  Message.objects.filter(message_type__id=1
                 ).filter(inactive=False  
                 ).filter(start_time__range=(now, nextweek)
                 ).order_by('-start_time', '-end_time')