gpt4 book ai didi

python - 如何让 'list' (players/) 和 'detail' (players/{id}) 有不同的结果?

转载 作者:太空狗 更新时间:2023-10-30 02:42:50 29 4
gpt4 key购买 nike

情况是这样的。我在我的 Django REST API 上得到了一个列表:/playerslist/

它返回了一个玩家列表,就像这个一样:

http://pastebin.com/JYA39gHT

这正是我现在想要的。但是现在,我需要这个:

搜索 /playerslist/1/ 给我 1 号球员的不同信息。该列表仅用于列出具有基本信息的球员。但我需要播放器的详细 View ,包含来自其他模型的信息和不同的序列化,这一定是一个基本问题,但由于我对 Django 和 Python 总体上是全新的,我一定误解了一些东西。

这是我的 View 集:

class PlayersListViewSet(viewsets.ModelViewSet):
queryset = Player.objects.all()
serializer_class = PlayersListSerializer
http_method_names = ['get', 'post']
pagination_class = None
filter_backends = [filters.OrderingFilter]
ordering_fields = ['name']

def get_queryset(self):
queryset = Player.objects.all()
team_id = self.request.query_params.get('team', None)

if team_id:
try:
queryset = queryset.filter(team=team_id)
except ValueError:
raise exceptions.ParseError()
return queryset

我怎样才能做到这一点?我必须使用 @detail_route 来获得类似 playerslist/1/detail 的内容吗?我已经尝试过了,但 DRF 的文档只显示了一个示例,对我来说一点也不清楚。

最佳答案

您可以覆盖方法 retrieve(返回一个实例)或 list(显然返回列表),如 http://www.django-rest-framework.org/api-guide/viewsets/ 中的第一个示例所示.

class PlayersListViewSet(viewsets.ModelViewSet):
queryset = Player.objects.all()
serializer_class = PlayersListSerializer
http_method_names = ['get', 'post']
pagination_class = None
filter_backends = [filters.OrderingFilter]
ordering_fields = ['name']

def get_queryset(self):
queryset = Player.objects.all()
team_id = self.request.query_params.get('team', None)

if team_id:
try:
queryset = queryset.filter(team=team_id)
except ValueError:
raise exceptions.ParseError()
return queryset

def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = PlayerDetailSerializer(instance)
return Response(serializer.data)

其中 PlayerDetailSerializer 是另一个具有不同字段(无论您需要什么)的序列化器,无需在 serializer_class 中指定它。

关于python - 如何让 'list' (players/) 和 'detail' (players/{id}) 有不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35322354/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com