Django - 查询TimeField,如何比较时间?

时间:2013-06-11 17:55:32

标签: django python-2.7 django-models

我在Django应用程序中有一个模型,看起来像这样

class Flight(models.Model):
    code = models.CharField(max_length = 15, primary_key = True)
    airline = models.ForeignKey(Airline)
    departure_airport = models.ForeignKey(Airport, related_name='flight_departure')
    departure_time = models.TimeField()
    arriving_airport = models.ForeignKey(Airport, related_name='flight_arriving')
    arriving_time = models.TimeField()
    aircraft = models.ForeignKey(Aircraft)

我现在只想检索当前时间之后离开的航班。为此,我在控制台上尝试了以下内容:

from datetime import *
time = datetime.time(datetime.now())
f = Flight.objects.filter(departure_time > time)

运行前面的语句后,我收到以下错误:

Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'departure_time' is not defined

另外,如果我尝试以下操作,我也会收到类似的错误:

f = Flight.objects.filter(departure_time > '12:00:00')

然而,这有效:

f = Flight.objects.filter(departure_time = '12:00:00')
print f
[<Flight: LH17>]

如果有人能就如何在TimeField字段上比较(查询)次数提供建议,我将非常感激吗?

感谢。

1 个答案:

答案 0 :(得分:3)

你的问题不在于它是一个时间字段,你的问题是你没有给filter字段查找。如果你试图在整数字段上进行那种查询,你会得到同样的错误。

Django查询不使用<>==等Python比较运算符表示。相反,它们(通常)使用关键字语法表达,然后使用赋值运算符=将值绑定到该语法。

您的查询应该是:

f = Flight.objects.filter(departure_time__gt=time)

https://docs.djangoproject.com/en/dev/topics/db/queries/#field-lookups有详细信息。