首页 > 解决方案 > Django/postgresql 中每小时更新的视图

问题描述

我希望在 Django 中使用活动项目填充页面。

item_active = DateTimeRangeField()

比较当前时间的任何更聪明的方法:理论上的“views.py”:

def time_now():
    return timezone.now()

def index(request):
    item_list = item.objects.raw('''SELECT col1, col2 FROM item_table
    WHERE upper(item_active) >= %s AND lower(item_active) <= %s''', [time_now])

时间比较的有效实现会有所帮助,但我的直觉告诉我,仅包含活动对象的 SQL 视图每小时更新一次(使用 Django 和 Celery 或 postgreSQL 每小时更新一次和 on_table_update)是最聪明的。

那么对于首选方式,如何通过 Django/Celery 或 Datebase 端实现物化视图?(每小时和 on_table_update)

标签: sqldjangopostgresqldjango-celerysql-view

解决方案


IMO 没有很好地记录在 Django 中使用范围字段。

如果您只是在寻找当前时刻 (timezone.now()) 与 item_active 字段的范围重叠的项目,这应该可以解决问题:

def index(request):
    item_list = Item.objects.filter(item_active__contains=timezone.now())

编辑:确保您使用标准的 Django 命名约定,以便其他人更容易帮助您。类应该总是大写。

https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/


推荐阅读