【问题标题】:django date filter doesn't updatedjango 日期过滤器不更新
【发布时间】:2018-07-11 23:15:57
【问题描述】:

我在一个 django 项目中创建了一个列表视图。 但是当一天过去时,过滤器停留在起始数据(网络服务器的启动或刷新)上。为什么不是每天更新?

这是我的代码:(餐厅订桌)

models.py:

class Table_book(models.Model):
    name = models.CharField(max_length=50)
    date = models.DateField()
    time = models.CharField(max_length=50, choices=TIMES)
    people = models.PositiveIntegerField(choices=TABLES)
    telephone = models.CharField(max_length=50)

views.py

class List_book(ListView):
    model = Table_book
    template_name = 'list_today.html'
    queryset = Table_book.objects.all().filter(date=timezone.now()).order_by('date', 'time')

urls.py

url(r'^$', login_required(List_book.as_view(), login_url='/login/'), name='home'),

在 template.html 中,列表对象填充一个表格。

【问题讨论】:

  • 查询是在模块加载时构建的,因为类定义是模块级代码。然后评估timezone.now()。每次调用视图时都会评估查询集,但查询只构建一次。
  • 我可以解决在主类中创建函数(请求)吗?
  • 没必要。 Django 的默认视图提供了必要的运行时钩子。我添加了一个答案。

标签: python django datetime filter


【解决方案1】:

为了使该查询在运行时评估now(),您应该覆盖get_queryset,而不是设置静态类属性queryset

class List_book(ListView):
    # ...
    def get_queryset(self):
        return Table_book.objects.all().filter(date=timezone.now()).order_by('date', 'time')

【讨论】:

  • 同样的问题...我看到昨天的订单
  • 更新:它与日期过滤器中的 datetime.time.today() 函数一起使用,可能适用于我的模型类型字段。
猜你喜欢
  • 2011-08-21
  • 2010-12-15
  • 2022-11-05
  • 2023-03-16
  • 1970-01-01
  • 2011-07-11
  • 2016-07-21
  • 2016-07-20
  • 1970-01-01
相关资源
最近更新 更多