0

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

我在下面运行它。

  • 阿帕奇 2.2
  • Postgres 9.2
  • Django 1.5.1
  • 视窗 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

因此,即将到来的_list 是对未来一周中断的查询。当发生中断时,消息现在应该属于 current_list。除非我重新启动 Apache,否则不会发生这种情况。

4

2 回答 2

1

我在这里写了关于这个问题的博客。

总结那篇文章,尽管查询集确实是惰性的,并且仅在调用视图时才进行评估,但定义now不是。正如富田所说,答案是在get_queryset.

于 2013-06-03T19:19:59.110 回答
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')
于 2013-06-03T18:46:21.783 回答