Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django Rest框架中为基于函数的视图添加过滤_Python_Django_Django Rest Framework - Fatal编程技术网

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,您是对的。我正在更新答案。现在检查。是的,它正在工作,但没有分页。使用分页时,它会给出响应中的所有结果。不知何故,您没有正确设置分页。最新答案