Python 如何在Django Rest框架中为基于函数的视图添加过滤
我正在尝试向基于函数的视图添加过滤器。使用基于类的视图,我能够向视图添加过滤器。但我很好奇是否可以将过滤添加到这个基于函数的视图中。我需要通过网络搜索按名称筛选主题。我怎样才能做到这一点Python 如何在Django Rest框架中为基于函数的视图添加过滤,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试向基于函数的视图添加过滤器。使用基于类的视图,我能够向视图添加过滤器。但我很好奇是否可以将过滤添加到这个基于函数的视图中。我需要通过网络搜索按名称筛选主题。我怎样才能做到这一点 @api_view(['GET']) @permission_classes([IsAuthenticated]) def TeacherSubject(request): teacher = TeacherProfile.objects.get(user=request.user) subje
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def TeacherSubject(request):
teacher = TeacherProfile.objects.get(user=request.user)
subject = Subject.objects.filter(author=teacher).order_by('-id')
paginator = PageNumberPagination()
paginator.page_size = 5
result_page = paginator.paginate_queryset(subject, request)
serializer = SubjectSerializer(result_page,many=True)
return paginator.get_paginated_response(serializer.data)
你可以用。比如说
# filters.py
class ProductFilter(django_filters.FilterSet):
class Meta:
model = Product
fields = ['price', 'release_date']
# views.py
...
from .filters import ProductFilter
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def product_list(request):
queryset = Product.objects.all()
filterset = ProductFilter(request.GET, queryset=queryset)
if filterset.is_valid():
queryset = filterset.qs
serializer = ProductSerializer(queryset, many=True)
return Response(serializer.data)
如果需要引发验证错误,请使用此
from .filters import ProductFilter
from django_filters.utils import translate_validation
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def product_list(request):
filterset = ProductFilter(request.GET, queryset=Product.objects.all())
if not filterset.is_valid():
raise translate_validation(filterset.errors)
serializer = ProductSerializer(filterset.qs, many=True)
return Response(serializer.data)
分页
from .filters import ProductFilter
from django_filters.utils import translate_validation
from rest_framework.pagination import PageNumberPagination
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def product_list(request):
paginator = PageNumberPagination()
paginator.page_size = 5
filterset = ProductFilter(request.GET, queryset=Product.objects.all())
if not filterset.is_valid():
raise translate_validation(filterset.errors)
queryset = paginator.paginate_queryset(filterset.qs, request)
serializer = ProductSerializer(queryset, many=True)
return paginator.get_paginated_response(serializer.data)
@api_view(['GET'])def SubjectList(request):subjects=SubjectFilter(request.GET,queryset=Subject.objects.all())serializer=subjectviewsserializer(subjects,many=True)在触发api后返回响应(serializer.data)
它给出的“SubjectFilter”对象不是iterableyep,您是对的。我正在更新答案。现在检查。是的,它正在工作,但没有分页。使用分页时,它会给出响应中的所有结果。不知何故,您没有正确设置分页。最新答案