我使用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
我想使用过滤对查询参数,但我不能真正得到它...
4条答案
按热度按时间tzxcd3kk1#
下面是代码:
jxct1oxe2#
你可以通过使用django-filter包来获得相同的功能,如文档中所述:
DjangoFilterBackend
在这种情况下,您必须使用
workspace=1
或workspace__airline=1
进行过滤。lskq00tm3#
这个django app使用传入的查询参数在视图的查询集上应用过滤器,这种方式简洁而优雅。
可以使用pip安装为
pip install drf-url-filters
使用示例
5fjcxozz4#
你可以使用查询字符串来过滤Django中的查询集。您可以使用传入的查询参数对视图的查询集应用筛选器。
下面是一个如何过滤查询集的示例:
在这个例子中,你可以通过workspace_id和airline_id来过滤你的查询集。如果workspace_id不为None,则它将按workspace_id过滤查询集。如果airline_id不为None,则按workspace__airline_id3过滤查询集。