Django REST框架-根据查询参数进行过滤

发布于 2021-01-29 15:11:16

因此,我使用REST框架创建了“ API”,现在尝试对其进行过滤。那就是我models.py或多或少的样子:

class Airline(models.Model):
    name = models.TextField()

class Workspace(models.Model):
    airline = models.ForeignKey(Airline)
    name = models.CharField(max_length=100)

class Passenger(models.Model):
    workspace = models.ForeignKey(Workspace)
    title = models.CharField(max_length=200)

因此,我想在我的JSON文件中看到“特定工作区中的所有乘客”或“特定航空公司中的所有乘客”等。

这是我的, serializers.py

class AirlineSerializer(serializers.ModelSerializer):
    class Meta:
        model = Airline


class WorkspaceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Workspace


class PassengerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Passenger

views.py

class AirlineList(generics.ListCreateAPIView):
    model = Airline
    serializer_class = AirlineSerializer


class AirlineDetail(generics.RetrieveUpdateDestroyAPIView):
    model = Airline
    serializer_class = AirlineSerializer


class WorkspaceList(generics.ListCreateAPIView):
    model = Workspace
    serializer_class = WorkspaceSerializer


class WorkspaceDetail(generics.RetrieveUpdateDestroyAPIView):
    model = Workspace
    serializer_class = WorkspaceSerializer


class PassengerList(generics.ListCreateAPIView):
    model = Passenger
    serializer_class = PassengerSerializer


class PassengerDetail(generics.RetrieveUpdateDestroyAPIView):
    model = Passenger
    serializer_class = PassengerSerializer

这是我第一次使用REST框架,我检查了文档,他们帮助了我到目前为止所做的一切,我想使用

根据查询参数进行过滤:http : //www.django-rest-
framework.org/api-guide/filtering/#filtering-against-query-
parameters

真的不能得到它..

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    因此,通过@limelights,我设法完成了我想要的工作,这是代码:

    class PassengerList(generics.ListCreateAPIView):
        model = Passenger
        serializer_class = PassengerSerializer
    
        # Show all of the PASSENGERS in particular WORKSPACE
        # or all of the PASSENGERS in particular AIRLINE
        def get_queryset(self):
            queryset = Passenger.objects.all()
            workspace = self.request.query_params.get('workspace')
            airline = self.request.query_params.get('airline')
    
            if workspace:
                queryset = queryset.filter(workspace_id=workspace)
            elif airline:
                queryset = queryset.filter(workspace__airline_id=airline)
    
            return queryset
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看