1

我正在使用 django 开发一个 web api,我有一个TimeField存储小时:分钟:秒,因为它将与来自移动应用程序的小时:分钟(没有秒)进行比较,比较总是会失败。

这是一个没有秒的比较,它返回一个空的 QuerySet:

>>> journey = Journey \
...        .objects \
...        .filter((Q(route__departStation=1) | Q(route__stop__station_id=1)),
...                (Q(route__arrivalStation=1) | Q(route__stop__station_id=1)),
...                route__departDate="2019-07-31", route__departTime="10:57")
>>> journey
<QuerySet []>

这是我在比较中添加秒数的时候:

>>> journey = Journey \
...        .objects \
...        .filter((Q(route__departStation=1) | Q(route__stop__station_id=1)),
...                (Q(route__arrivalStation=1) | Q(route__stop__station_id=1)),
                route__departDate="2019-07-31", route__departTime="10:57:05")
>>> journey
<QuerySet [<Journey: Journey object (1)>]>

所以请,我怎样才能防止秒从这个TimeField()保存到数据库,或者至少我怎样才能将比较限制在小时和分钟。

4

1 回答 1

1

您可以在此处使用TruncMinute表达式 [Django-doc]

from django.db.models.functions import TruncMinute

journeys = Journey.objects.annotate(
    depart_minute=TruncMinute('route__departTime')
).filter(
    (Q(route__departStation=1) | Q(route__stop__station_id=1)),
    (Q(route__arrivalStation=1) | Q(route__stop__station_id=1))
    route__departDate='2019-07-31', depart_minute='10:57'
)

话虽如此,我建议您使用 a DateTimeFieldover a DateFieldand TimeField。时间实际上只有结合日期(和时区)才有意义。许多国家/地区都有夏令时 (DST),或者在历史上改变了他们的时区。因此,最好将这些结合起来。

于 2019-08-14T19:39:30.423 回答