У меня есть модель, которая содержит FileField, который может быть не пустым.При создании тестов для этой модели я столкнулся с проблемой, что я получаю ошибки при тестировании с PUT, в то время как то же самое работает при выполнении POST.В качестве представлений я просто использую generics.ListCreateAPIView
для пункта назначения POST и generics.RetrieveUpdateDestroyAPIView
для пункта назначения PUT, оба работают нормально при использовании API в браузере.
Полезная нагрузка для POST и PUT создается следующим образом:
uploaded_file = SimpleUploadedFile('TestCode4.c', "Testcode", content_type='text/plain')
self.valid_payload = {
'name': 'TestValid',
'test_file': uploaded_file
}
Тогда рабочий тест POST выглядит следующим образом:
client = Client()
response = client.post(
reverse('code-list'),
self.valid_payload,
format='json'
)
И PUT:
client = Client()
response = client.put(
reverse('code-detail', kwargs={'pk': 1}),
self.valid_payload,
format='json'
)
POST возвращает 204 и создает новый объект, в то время как PUT возвращает 415 со следующей ошибкой:
{u'detail': u'Unsupported media type "application/octet-stream" in request.'}
Я не уверен, что здесь идет не так, похоже, что и post, и put передают данные SimpleUploadedFile
одинаково, хотяс положением это как-то становится потоком октетов.