我在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
我认为在将它们放入范围之前我必须将它们作为约会,这是正确的吗?最有效的方法是什么?
非常感谢
答案 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_login
是DateTimeField
,它会尝试将字符串值转换为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))