【问题标题】:Django - Query on a TimeField, how to compare times?Django - 在 TimeField 上查询,如何比较时间?
【发布时间】:2013-06-07 16:28:18
【问题描述】:

我在 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 字段的时间提供建议,我将非常感激?

谢谢。

【问题讨论】:

  • 对于任何寻求进一步建议的人,请查看link

标签: django python-2.7 django-models


【解决方案1】:

你的问题不在于它是一个时间字段,你的问题是你没有给filter 一个字段查找。如果您尝试对整数字段进行此类查询,则会遇到同样的错误。

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

您的查询应该是:

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

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

【讨论】:

    猜你喜欢
    • 2013-08-18
    • 2019-06-04
    • 2017-06-28
    • 2019-12-21
    • 1970-01-01
    • 2020-08-18
    • 2011-02-02
    • 2020-01-14
    • 1970-01-01
    相关资源
    最近更新 更多