1

我通过 request.GET 发送两个日期值以过滤查询集:

if 'from_date' in request.GET:    
            from_date = request.GET['from_date']
            if 'to_date' in request.GET:    
                to_date = request.GET['to_date']
            else:
                to_date = datetime.date.today()        
            calls_queryset = calls_queryset.filter(contact_date__range=(from_date, to_date))

虽然 filter__range 会中断。它似乎不喜欢我发送的日期格式。

?from_date=08/08/2012&to_date=08/29/2012

我想我必须在将它们放入范围之前将它们转换为日期,这是正确的吗?最有效的方法是什么?

非常感谢

4

3 回答 3

3

DateField支持从格式'YYYY-mm-dd'转换为 python datetime.date

>>> from django.db import models
>>> models.DateField().to_python('2012-08-22')
datetime.date(2012, 8, 22)

因此range查找接受字符串作为参数:

>>> from django.contrib.auth.models import User
>>> print User.objects.filter(last_login__range=('1970-01-01', '2012-12-31')).values('pk').query
SELECT "auth_user"."id" FROM "auth_user" WHERE "auth_user"."last_login" 
BETWEEN 1969-12-31 16:00:00 and 2012-12-30 16:00:00

请注意,这last_login是一个DateTimeField尝试将字符串值转换为datetime.datetime(我在 +8 时区,因此默认值00:00:00变为16:00:00前一天)

在客户端,参考如何在 JavaScript 中输出 ISO 8601 格式的字符串?以 . 格式生成日期字符串'YYYY-mm-dd'

于 2012-08-29T14:02:54.057 回答
1

不要在 url 中使用斜杠...替换为点或使用 yyymmdd 格式。

于 2012-08-29T11:17:31.767 回答
0

斜杠是不可以的,为了方便,我会转换为UNIX 时间戳

然后要将其转换为 python 可读格式,您可以执行以下操作:

import time
time.ctime(int(retrieved_timestamp))
于 2012-08-29T11:14:01.520 回答