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

Oct*_*vio 1 django django-models python-2.7

我在 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)
Run Code Online (Sandbox Code Playgroud)

我现在只想检索当前时间之后起飞的航班。为此,我在控制台上尝试了以下操作:

from datetime import *
time = datetime.time(datetime.now())
f = Flight.objects.filter(departure_time > time)
Run Code Online (Sandbox Code Playgroud)

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

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

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

f = Flight.objects.filter(departure_time > '12:00:00')
Run Code Online (Sandbox Code Playgroud)

但是,这有效:

f = Flight.objects.filter(departure_time = '12:00:00')
print f
[<Flight: LH17>]
Run Code Online (Sandbox Code Playgroud)

如果有人可以提供有关如何在 TimeField 字段上比较(查询)时间的建议,我将非常感激?

谢谢。

Pet*_*per 6

你的问题不在于它是一个时间字段,你的问题在于你没有进行filter字段查找。如果您尝试在整数字段上进行此类查询,则会出现相同类型的错误。

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

您的查询应该是:

f = Flight.objects.filter(departure_time__gt=time)
Run Code Online (Sandbox Code Playgroud)

https://docs.djangoproject.com/en/dev/topics/db/queries/#field-lookups有完整的细节。