过滤在特定时间之前或之后添加的 django 对象
Posted
技术标签:
【中文标题】过滤在特定时间之前或之后添加的 django 对象【英文标题】:Filter objects in django which are added before or after a specific Hour of time 【发布时间】:2016-05-10 00:33:38 【问题描述】:我在我的应用程序中使用 django-1.7。我有一个有两个 DateTimeFields 的模型。喜欢
class Task(models.Model):
start_time = models.DateTimeField(null=True, blank=True)
finish_time = models.DateTimeField(null=True, blank=True)
我想用小时 gte
和 lte
过滤字段 start_time
和 end_time
以便我可以获得包含任务对象的查询集,这些任务对象必须在特定时间开始并结束于一个特定的时间。我尝试过的
Task.objects.filter(start_time__hour__gte=2)
Task.objects.filter(end_time__hour__lte=2)
但是这个查询给了我错误
FieldError: Unsupported lookup 'hour' for DateTimeField or join on the field not permitted.
我也尝试过 queryset.raw,它提供了正确的值,但在与 django-filters
包一起使用时会出错。
def start_time_filter(self, queryset, value):
if value.isdigit():
return queryset.raw("select * from app_task WHERE TIME(`start_time`) >= '0';".format(value))
return queryset.none()
将得到帮助
【问题讨论】:
【参考方案1】:对此我不确定,但通过阅读文档听起来hour__gte=2
语法仅在 django 1.9 中添加。以前版本的 django 只允许精确查找,例如 hour=2
。您可以考虑升级 django 并重试。
关于原始查询错误,我不知道你得到了什么错误,但 django doc 也有相应的语法。您可能会查找确切的 sql 语句,因为数据库的每个 sql 语句都是不同的。这可能会解决您不想升级 django 的问题。
django doc about hour lookup in django 1.7
django doc about hour lookup in django 1.9
【讨论】:
是的,此功能仅在 1.9 中添加。 试图在不升级到 django-1.9 的情况下获得一些解决方案以上是关于过滤在特定时间之前或之后添加的 django 对象的主要内容,如果未能解决你的问题,请参考以下文章
在特定的其他列之前或之后添加 sql 表列 - 通过 Laravel 4.1 中的迁移