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

本文展示了两种在Django REST Framework中创建API视图的方法,用于处理数据查询和过滤。方法1涉及`File_version`模型,使用`DjangoFilterBackend`和`OrderingFilter`对`file_info_id`进行过滤和排序。方法2涉及`Person_permission`模型,通过`Person_permissionFilter`类实现模糊搜索和用户ID过滤,并按`permission_id`降序排列。在每个方法的`get`方法中,对过滤后的数据进行序列化并返回响应。
1817

被折叠的 条评论
为什么被折叠?



