У меня есть Django viewset MyModelViewset
, который расширяет MultipleDBModelViewSet
(часть стороннего проекта под названием django-rest-framework-bulk
):
class MultipleDBModelViewSet(BulkModelViewSet):
def get_queryset(self):
try:
multiple_ids = json.loads(self.request.query_params.get("ids"))
except (TypeError, json.decoder.JSONDecodeError):
multiple_ids = None
if not multiple_ids:
return self.get_serializer_class().Meta.model.objects.all()
else:
return self.get_serializer_class().Meta.model.objects.filter(pk__in=multiple_ids)
def list(self, request, *args, **kwargs):
return super().list(request, *args, **kwargs)
...
def destroy(self, request, *args, pk=None, **kwargs):
return super().destroy(request, *args, pk=pk, **kwargs)
def bulk_destroy(self, request, *args, **kwargs):
ids = json.loads(request.query_params.get("ids"))
if not ids:
return super().destroy(request, *args, pk=kwargs.pop("pk"), **kwargs)
else:
return super().bulk_destroy(request, *args, **kwargs)
Базовый набор содержит следующий метод, который не перезаписывается в MyModelViewset
:
def bulk_destroy(self, request, *args, **kwargs):
ids = json.loads(request.query_params.get("ids"))
if not ids:
return super().destroy(request, *args, pk=kwargs.pop("pk"), **kwargs)
else:
return super().bulk_destroy(request, *args, **kwargs)
Я предполагаю, что этот метод означает, что я могу передать параметр с именем ids
, и все объекты с этими ids
будут удалены?
Я попытался отправить запрос на удаление по соответствующему URL:
v1/mymodel?ids=["4cea187e-56af-439c-96a7-e001d85c5000","3d7bd2ac-bc27-4a1b-acfd-9b651852114e"]
-> это возвращает ответ 200 и ведет себя как GET
запрос
v1/mymodel?ids=["4cea187e-56af-439c-96a7-e001d85c5000","3d7bd2ac-bc27-4a1b-acfd-9b651852114e"]/
-> это возвращает ответ 400 "Плохой запрос"
MyModels с этими ids
do существуют в моей БД, и я могу удалить отдельные MyModels с помощью: }/v1/mymodel/4cea187e-56af-439c-96a7-e001d85c5000
Что я делаю не так?