gpt4 book ai didi

django - 使用模型 ID 列表调用 django rest API

转载 作者:行者123 更新时间:2023-12-01 13:51:32 24 4
gpt4 key购买 nike

我正在尝试找出使用这些模型 ID 列表查询特定模型的端点的最佳方法。我知道我可以使用 url (/markers/{id}) 中的 id 查询详细端点,但我希望能够一次发布多个 id 并从具有这些 id 的模型实例接收数据。截至目前,我创建了一个如下所示的自定义 APIView(MarkerDetailsList),我基本上只是发布一个 id 列表并定义一个自定义 post 方法来解析和查找数据库中的 id,但我发现很难相信这一点是实现这一目标的最佳方式。有没有办法使用 View 集实现同样的事情?我检查了文档并四处搜索,似乎找不到任何东西。有什么建议?

class MarkerViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.AllowAny]
authentication_classes = ()
queryset = Marker.objects.all()
serializer_class = MarkerSerializer

class MarkerDetailList(APIView):
queryset = Marker.objects.all()
serializer_class = MarkerSerializer
permission_classes = [permissions.AllowAny]
authentication_classes = (JSONWebTokenAuthentication, )

def post(self, request):
ids = request.data['mapIds']
markers = Marker.objects.filter(id__in=ids)
serializer = MarkerSerializer(markers, many=True)
return Response(serializer.data)

最佳答案

您可以使用 FilterFilterSet为了这。 (写了部分代码,然后找到 https://stackoverflow.com/a/24042182/2354734 )

class ListFilter(django_filters.Filter):
def filter(self, qs, value):
if value not in (None, ''):
integers = [int(v) for v in value.split(',')]
return qs.filter(**{'%s__%s'%(self.name, self.lookup_type):integers})
return qs

class MarkerFilter(django_filters.FilterSet):
ids = django_filters.NumberFilter(name="id", lookup_type='in')

class Meta:
model = Marker
fields = ['ids']

class MarkerViewSet(viewsets.ModelViewSet):
queryset = Marker.objects.all()
serializer_class = MarkerSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = MarkerFilter

当你现在检索/markers/?ids=1,2,3,4

关于django - 使用模型 ID 列表调用 django rest API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31278330/

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