django-rest-framework中的年/月/日/小时/分钟/秒过滤器

时间:2015-07-08 22:17:22

标签: django-rest-framework

我已经定义了一个像这样的django-rest过滤器:

created_date = django_filters.DateTimeFilter(
    lookup_type=["year", "month", "day", "hour", "minute", "second", "lt", "lte", "gt", "gte"])

此网址执行正确的查询:created_date< 2015年5月1日:

http://localhost:8000/path/objects/?created_date__lt=2015-05-01

同样适用于GT for:created_date> 2015年5月1日:

http://localhost:8000/path/objects/?created_date__gt=2015-05-01

此网址会执行正确的查询:created_date> 2015年5月1日

但是,当我尝试查询年份时:

http://localhost:8000/path/objects/?created_date__year=2015

我得到了

TypeError: int() argument must be a string or a number, not 'datetime.datetime'

我也试过

http://localhost:8000/path/objects/?created_date__year=2015-05-01

我得到同样的错误。知道如何让年/月/日/小时/分钟/秒过滤器工作吗?

1 个答案:

答案 0 :(得分:0)

DateTimeFilter过滤器将输入值转换为日期时间,因此将created_date__year与日期时间进行比较,这是错误的。必须将其与int进行比较。

解决方案1:

为同一字段添加另一个过滤器:

created_date_part = django_filters.NumberFilter(
    name='created_date',
    lookup_type=["year", "month", "day", "hour", "minute", "second"])

但是,您需要为此字段创建另一个名称。

解决方案2:

编写将继承CharFilter并自行完成所有验证的自定义过滤器。