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']```