我正在使用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()保存到数据库中,或者至少我如何才能将比较限制为小时和分钟。
2条答案
按热度按时间p1iqtdky1#
你可以在这里使用一个**
TruncMinute
**表达式[Django-doc]:话虽如此,我还是建议您使用
DateTimeField
,而不是DateField
和TimeField
。实际上,时间只有与日期(和时区)结合使用才有意义。许多国家都有夏令时(DST),或者在历史上改变了时区。因此,最好将这些时间结合使用。vu8f3i0k2#
在这个模型中,你基本上可以覆盖save方法,获取timefield属性,然后用一个新的datetime.time对象覆盖它,但不把秒存储在其中。
以下是一个示例:
但是,请记住,当您使用批量操作来创建Route对象或更新查询集时,不会调用save方法。在这些情况下,您可以使用管理器类来覆盖例如bulk_create或bulk_update方法,或者使用QuerySet来覆盖更新方法,并只在其中存储小时和分钟。