我已经定义了一个像这样的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
我得到同样的错误。知道如何让年/月/日/小时/分钟/秒过滤器工作吗?
答案 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
并自行完成所有验证的自定义过滤器。