处理日期超过request.GET

时间:2012-08-29 11:11:18

标签: django

我在request.GET上发送两个日期值来过滤querySet:

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

我认为在将它们放入范围之前我必须将它们作为约会,这是正确的吗?最有效的方法是什么?

非常感谢

3 个答案:

答案 0 :(得分: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_loginDateTimeField,它会尝试将字符串值转换为datetime.datetime(我在+8时区,因此默认00:00:00变为{{1}前一天)

在客户端,请How do I output an ISO 8601 formatted string in JavaScript?生成16:00:00格式的日期字符串。

答案 1 :(得分:1)

不要在网址中使用斜线...用点替换或使用yyyy mm dd格式。

答案 2 :(得分:0)

斜杠是否定的,为方便起见,我会转换为UNIX timestamp

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

import time
time.ctime(int(retrieved_timestamp))