DRF APIClient Данные для удаления поступают в request.data, а не в request.query_params
Я использую APIClient от DRF для написания автоматизированных тестов. И во время написания первого теста на удаление, я обнаружил, что очень странно, что передаваемые данные поступают в request.data, в то время как если я использую Axios или Postman, они всегда поступают в request.query_params. Любое объяснение, почему так происходит, и, желательно, метод использования APIClient.Delete, пока данные приходят в query_params, было бы замечательно!
Мой тест:
import pytest
from rest_framework.test import APIClient
@pytest.fixture()
def client():
client = APIClient()
client.force_authenticate()
yield client
class TestDelete:
def test_delete(client):
response = client.delete('/comment', data={'team': 0, 'id': 54})
И мои взгляды
from rest_framework.views import APIView
class Comments(APIView):
def delete(self, request):
print(request.query_params, request.data)
>>> <QueryDict: {}> <QueryDict: {'team': ['0'], 'id': ['54']}>
Посмотрел на APIClient от DRF. Передача параметров не помогает. Метод delete, похоже, не имеет прямых аргументов, которые могли бы помочь. Так что я немного застрял
Хотя было предложено несколько хороших вариантов, они не работали с APIView от DRF. В итоге я использовал urllib
и кодировал его вручную:
import pytest
from urllib.parse import urlencode
from rest_framework.test import APIClient
@pytest.fixture()
def client():
client = APIClient()
client.force_authenticate()
yield client
class TestDelete:
def test_delete(client):
response = client.delete(f'/comment{urlencode(data)}')