请教 django 查询问题

2018-10-10 19:38:32 +08:00
 zhuyw2006
有一个字段是<年月日时分秒>,FSTTIME = models.CharField(max_length=14, blank=True, null=True)
例:20181010112339

我需要根据开始时间(时分秒),和结束时间(时分秒)。去查询这个字段;
而且可能会跨越凌晨,比如:从下午 16 点 到 凌晨 5 点 ( 160000 ~ 050000 );
不知道这样能不能查询呢?谢谢
2911 次点击
所在节点    Django
13 条回复
Leigg
2018-10-10 19:53:11 +08:00
怎么查的到呢?
应该存时间戳,查的时候条件随便给,都可以转换成时间戳在库里面查。
zhuyw2006
2018-10-10 20:00:19 +08:00
@Leigg 你好,是把时间信息单独放在 TimeField 字段吗?
lonelinsky
2018-10-10 20:06:55 +08:00
用 DateTimeField,然后啥问题都解决了,时间切片都可以 https://docs.djangoproject.com/en/2.1/ref/models/fields/#datetimefield
fatelovely
2018-10-10 20:08:35 +08:00
用字符串类型存储时间信息,这不是把一个简单的问题生生复杂化了吗?

如果是固定的查询要求,比如「下午 16 点到凌晨 5 点」,可以通过构造正则表达式,还是可以查的。

如果是动态的查询要求,就算了吧。重新开一个时间戳字段,使用当前的字符串字段初始化一下,是正道。
zhuyw2006
2018-10-10 20:17:13 +08:00
@lonelinsky
@fatelovely
我只需要时分秒,使用 TimeField 字段就可以了吧?
查询下午 16 点 到 凌晨 5 点的时候是不是 FSTTIME__gte=160000 FSTTIME__lte=050000 ?
Leigg
2018-10-10 20:59:47 +08:00
不是,就像存一个 int 类型把时间戳存进去就可以了。integerfield
Leigg
2018-10-10 21:01:03 +08:00
timefield 我想也是能够解决问题的,只是我用的最多的还是时间戳,什么数据库都可以存。
zhuyw2006
2018-10-10 22:24:47 +08:00
@fatelovely 你好,我现在单独使用字符串字段放时间,当天到凌晨的应该如何查询呢?
我现在这样 Q(FSTTIME__range=(checkPeriodSTime, “ 235959 ”)) &
Q(FSTTIME__range=("000000", checkPeriodETime))
查询不到。
NaVient
2018-10-11 08:40:43 +08:00
@zhuyw2006 写个脚本就把里边的数据转了,继续用字符串存时间以后你的坑会越来越多的
PythonAnswer
2018-10-11 09:02:25 +08:00
时间戳。自己换算 hms。这样跨日方便。
不跨日可以用 datetime 记得可以单独提取年月日时分秒。
zhuyw2006
2018-10-11 09:58:22 +08:00
@NaVient 我现在已经独立出来了。不过还是不知道怎么查询跨越凌晨的问题,比如:从下午 16 点 到 凌晨 5 点 ( 160000 ~ 050000 );

@PythonAnswer 应该如何查询呢?谢谢
lonelinsky
2018-10-11 10:10:41 +08:00
@zhuyw2006
如果是用 TimeField 的话用 ` Q(FSTTIME__gte=160000) | Q(FSTTIME__lte=050000) ` 应该是可以的呀
zhuyw2006
2018-10-11 11:05:31 +08:00
@lonelinsky 谢谢,安装您的方法改成 DateTimeField 字段就可以了,不过查询的时候要加 FSTTIME__time__gte,
因为我只需时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/496461

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX