【发布时间】:2015-01-26 18:01:36
【问题描述】:
我正在使用 Django REST Framework,并且我正在使用过滤器来过滤查询集。
http://www.django-rest-framework.org/api-guide/filtering/#filtering-against-query-parameters
喜欢这个
http://example.com/api/products/4675/?category=clothing&max_price=10.00
但是我已经看到,如果过滤器有错误或查询参数不存在,那么它会显示所有非常糟糕的结果。
如果查询参数有问题,我宁愿没有结果,因为有时我不知道这是否有效
编辑
这是我的代码
class userFilter(django_filters.FilterSet):
strict = True
class Meta:
model = User
fields = ('is_active', 'is_archived', 'age')
休息
class UserListCreateView(generics.ListCreateAPIView):
queryset = User.objects.filter(is_archived=False)
ordering_fields = ('is_active')
filter_class = userFilter
这是 REST 设置
REST_FRAMEWORK = {
'DEFAULT_MODEL_SERIALIZER_CLASS':
'rest_framework.serializers.HyperlinkedModelSerializer',
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
'rest_framework.filters.SearchFilter',
'rest_framework.filters.OrderingFilter',
),
# 'PAGINATE_BY': 1,
'PAGINATE_BY_PARAM': 'page_size',
'MAX_PAGINATE_BY': 100,
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
)
}
【问题讨论】:
-
你应该发布你的代码..查看它之后会有意义..如果你真的按照你引用的链接..它会导致给出所有结果,因为它返回一个查询集初始化为objects.all,而不是你应该检查query_params,如果不正确返回None ..为了更好的答案吐出你的代码!
-
@vijayshanker 嗨,vijay,我已经添加了代码。请看一下
-
覆盖 get_queryset 方法.. 并在请求中查找 QUERY_PARAMS 以缩小结果范围.. 应该这样做
标签: django django-rest-framework