I created my “API” using REST framework, now I am trying to do filtering for it.
This is how my models.py
looks like:
JavaScript
x
11
11
1
class Airline(models.Model):
2
name = models.TextField()
3
4
class Workspace(models.Model):
5
airline = models.ForeignKey(Airline)
6
name = models.CharField(max_length=100)
7
8
class Passenger(models.Model):
9
workspace = models.ForeignKey(Workspace)
10
title = models.CharField(max_length=200)
11
I would like to see “all passengers in particular workspace” or “all passengers in particular airline” etc in my JSON file.
Here is my serializers.py
:
JavaScript
1
14
14
1
class AirlineSerializer(serializers.ModelSerializer):
2
class Meta:
3
model = Airline
4
5
6
class WorkspaceSerializer(serializers.ModelSerializer):
7
class Meta:
8
model = Workspace
9
10
11
class PassengerSerializer(serializers.ModelSerializer):
12
class Meta:
13
model = Passenger
14
And views.py
:
JavaScript
1
29
29
1
class AirlineList(generics.ListCreateAPIView):
2
model = Airline
3
serializer_class = AirlineSerializer
4
5
6
class AirlineDetail(generics.RetrieveUpdateDestroyAPIView):
7
model = Airline
8
serializer_class = AirlineSerializer
9
10
11
class WorkspaceList(generics.ListCreateAPIView):
12
model = Workspace
13
serializer_class = WorkspaceSerializer
14
15
16
class WorkspaceDetail(generics.RetrieveUpdateDestroyAPIView):
17
model = Workspace
18
serializer_class = WorkspaceSerializer
19
20
21
class PassengerList(generics.ListCreateAPIView):
22
model = Passenger
23
serializer_class = PassengerSerializer
24
25
26
class PassengerDetail(generics.RetrieveUpdateDestroyAPIView):
27
model = Passenger
28
serializer_class = PassengerSerializer
29
I would like to use Filtering against query parameter but I can’t really get it…
Advertisement
Answer
Here is the code:
JavaScript
1
18
18
1
class PassengerList(generics.ListCreateAPIView):
2
model = Passenger
3
serializer_class = PassengerSerializer
4
5
# Show all of the PASSENGERS in particular WORKSPACE
6
# or all of the PASSENGERS in particular AIRLINE
7
def get_queryset(self):
8
queryset = Passenger.objects.all()
9
workspace = self.request.query_params.get('workspace')
10
airline = self.request.query_params.get('airline')
11
12
if workspace:
13
queryset = queryset.filter(workspace_id=workspace)
14
elif airline:
15
queryset = queryset.filter(workspace__airline_id=airline)
16
17
return queryset
18