django restframework使用filter_backends

1.方法1

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter
from rest_framework.response import Response
from bffile_data import models
from bffile_data.serializers import File_versionSerializers
from rest_framework.generics import GenericAPIView
from rest_framework import mixins
class History_file_dates(GenericAPIView, mixins.ListModelMixin):
    queryset = models.File_version.objects.filter(is_delete='0')
    serializer_class = File_versionSerializers
    filter_backends = [DjangoFilterBackend, OrderingFilter]
    filter_fields = ["file_info_id"]
    ordering = ["-file_version"] #代表从大到小

    def get(self, request):
        serializer_datas = self.serializer_class(self.filter_queryset(self.get_queryset()), many=True).data
        result = ts.result_data(status.HTTP_200_OK, serializer_datas, "查询成功")
        return Response(result)

2.方法2
views文件

from rest_framework import mixins, status
from bffile_data.serializers import Person_permissionSerializers, Person_permissionFilter
from bffile_data import models
from django.db.models import Q
from rest_framework.views import APIView
from bfresource_platform import settings as config
from bffile_data import tools as ts
from rest_framework.generics import GenericAPIView
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter
from rest_framework.response import Response
class Projects_dates(GenericAPIView, mixins.ListModelMixin):
    queryset = models.Person_permission.objects.all()
    serializer_class = Person_permissionSerializers
    filter_backends = [DjangoFilterBackend, OrderingFilter]
    filter_class = Person_permissionFilter
    ordering = ["-permission_id"]

    def get(self, request):
        query_set = self.filter_queryset(self.get_queryset())
        serializer_datas = self.serializer_class(instance=query_set.distinct(), many=True).data
        result = ts.result_data(status.HTTP_200_OK, serializer_datas, "查询成功")
        return Response(result)

serializers文件

from rest_framework import serializers

class Person_permissionSerializers(serializers.ModelSerializer):
    project_name = serializers.SerializerMethodField()
    project_id = serializers.SerializerMethodField()

    def get_project_name(self, obj):
        return obj.file_info_id.file_name if obj.file_info_id else None

    def get_project_id(self, obj):
        return obj.file_info_id.file_id if obj.file_info_id else None

    class Meta:
        model = Person_permission
        fields = ["project_id","project_name"]

class Person_permissionFilter(django_filters.rest_framework.FilterSet):
    project_name = django_filters.CharFilter('file_info_id__file_name',lookup_expr='icontains')#模糊搜索
    user_id = django_filters.CharFilter('person_id')

    class Meta:
        model = Person_permission
        fields = ['user_id','project_name']```


版权声明:本文为roy8666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。