Django: bulk_destroy возвращает "400: неверный запрос" - PullRequest
0 голосов
/ 28 июня 2019

У меня есть 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

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...