【发布时间】:2015-07-08 01:09:57
【问题描述】:
我正在尝试为我的一个模型实现一个基本的“开始之前”/“开始之后”过滤器。不幸的是,过滤器永远不会被应用。我做错了什么?
型号
class Shift(models.Model):
...snip...
start_time = models.DateTimeField()
end_time = models.DateTimeField()
...snip...
class Meta:
ordering = ('station', 'employee', 'confirmed', 'start_time',)
过滤器集
import django_filters
from serverapp.models import Shift
class ShiftFilter(django_filters.FilterSet):
"""
A filter to enable fetching shifts within a date range
"""
# Specify the URL parameters we can use for filtering
start_before = django_filters.DateTimeFilter(
name="start_time",
lookup_type="lte")
start_after = django_filters.DateTimeFilter(
name="start_time",
lookup_type="gte")
class Meta:
# Specify the mode we're filtering on
model = Shift
# Specify the fields you can filter by (in this case just the
# two above)
fields = ['start_before', 'start_after']
查看
class ShiftViewSet(viewsets.ModelViewSet):
serializer_class = ShiftSerializer
filter_class = ShiftFilter
...snip...
查询(使用 HTTPIE)
http http://127.0.0.1:8000/v1/shifts/?start_before=2015-04-23
http http://127.0.0.1:8000/v1/shifts/?start_after=2015-04-23
记录
id start_time end_time
13 2015-04-16 16:18:13 2015-04-17 16:18:13
14 2015-04-16 16:18:13 2015-04-17 16:18:13
15 2015-04-24 16:18:13 2015-04-24 17:18:13
我希望 start_before=2015-04-23 返回 2015 年 4 月 16 日的两条记录,start_after=2015-04-23 返回 2015 年 4 月 24 日的一条记录。不幸的是,无论我运行两个查询中的哪一个,我都会返回所有三个记录。
这似乎是一件很容易实现的事情,我怎么会搞砸呢?
【问题讨论】:
-
您是否将
filters.DjangoFilterBackend添加到您的filter_backends中? -
@soooooot 你明白了!如果您将其作为答案提交,我会接受。
标签: django django-rest-framework django-filter