我urls.py在django项目的“www.example.com“文件夹中有一个API URL:-
path('tests/filter/<str:key1>/<str:value1>', FilterTests.as_view())
这对下面的代码很有效:-
from rest_framework import generics
from service.models import Test
from service.serializers import TestListSerializer
class FilterTests(generics.ListAPIView):
queryset = Test.objects.all()
serializer_class = TestListSerializer
def get_queryset(self, *args, **kwargs):
key1 = self.kwargs['key1']
value1 = self.kwargs['value1']
return Test.objects.filter(**{key1: value1})
上面的代码只根据get请求中传递的一个键值对过滤我的Test对象,现在我想过滤一个以上的键值对。
例如:-过滤器应为:姓名=约翰&类型_测试=算法&计数=3
我应该如何在django中设计API端点,同时又不使url太长?我可以通过请求体使用json或map吗?我是django和api开发的初学者,所以任何帮助都将不胜感激。
1条答案
按热度按时间yjghlzjz1#
你可以使用django-filter。
管道安装django过滤器
然后将'django_filters'添加到Django的INSTALLED_APPS:
将过滤器后端添加到您的设置
将过滤器后端添加到单个视图或视图集。
如果您只需要简单的基于相等的筛选,您可以在视图或视图集上设置filterset_fields属性,列出您希望筛选的字段集。
https://www.django-rest-framework.org/api-guide/filtering/