Django的REST框架 - 对查询参数过滤 [英] Django REST framework - filtering against query param
问题描述
所以,我创建了我的API使用REST框架,现在试图做过滤它。
那怎么我的 models.py
看起来或多或少:
So I created my "API" using REST framework, now trying to do filtering for it.
That's how my models.py
look like more or less:
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文件中看到特别工作区所有乘客或特别航班所有乘客等。
So I would like to see in my JSON file "all passengers in particular workspace" or "all passengers in particular airline" etc.
下面是我的, 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框架我第一次,我已经检查了文档,他们帮助我什么我迄今所做的,我想用
It's my first time using REST framework, I have checked the docs, they helped me with what I've done so far, I would like to use
针对查询参数过滤:
<一href=\"http://www.django-rest-framework.org/api-guide/filtering/#filtering-against-query-parameters\">http://www.django-rest-framework.org/api-guide/filtering/#filtering-against-query-parameters
无法真正得到它。
推荐答案
于是用@limelights我能够做到我想要的东西,这里是code:
So with the @limelights I managed to do what I wanted, here is the code:
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', None)
airline = self.request.query_params.get('airline', None)
if workspace is not None:
queryset = queryset.filter(workspace_id=workspace)
elif airline is not None:
queryset = queryset.filter(workspace__airline_id=airline)
return queryset
这篇关于Django的REST框架 - 对查询参数过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!