我在我的应用中使用django-1.7。我有一个有两个DateTimeFields的模型。喜欢
class Task(models.Model):
start_time = models.DateTimeField(null=True, blank=True)
finish_time = models.DateTimeField(null=True, blank=True)我想用hours、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()帮助将被评估
发布于 2016-02-01 22:23:56
我不确定这一点,但通过阅读文档,听起来hour__gte=2语法只是在Django1.9中添加的。以前的django版本只允许像hour=2这样的精确查找。您可以考虑升级django,然后重试。
关于原始查询错误,我不知道你得到了什么错误,但django doc也有相应的语法。您可能会查找确切的sql语句,因为数据库的每个sql语句都是不同的。这可能会解决你的问题,你不想升级django。
https://stackoverflow.com/questions/35132551
复制相似问题