Запрос Django api update/create из тестового примера никогда не вызывал соответствующие методы в сериализаторе

Как я могу отправить запрос UPDATE или CREATE из моего тестового примера? Когда я запускаю свой тестовый пример, методы create/update никогда не срабатывают в сериализаторе... Что я не так понимаю в философии Django? Может кто-нибудь подсказать, что мне делать?

Например:

#View
class  filesPairView (viewsets.ModelViewSet):
    serializer_class = filesPairViewSerializer
    
    def create(self, request):
    ...
        return Response(status=status.HTTP_201_CREATED)


#Serializer
class filesPairViewSerializer(serializers.ModelSerializer):

    class Meta:
        ...
    
    def create(self, validated_data):
        print ("filesPairViewSerializer CREATE")
        

    def update(self, validated_data):
        print ("filesPairViewSerializer UPDATE")
        


#Test case
class filesPairViewTestCase(APITestCase):

    def test_barmi(self):
        print("test_barmi")
        url = ('http://127.0.0.1:8000/api/filesPairView/')
        data ={
        #some valid data
        }

        response = self.client.post(url, data)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)


#urls
router.register(r'filesPairView', views.filesPairView )

Сделайте следующее:

#Test case
from django.urls import reverse

class filesPairViewTestCase(APITestCase):

    def test_barmi(self):
        print("test_barmi")
        url = reverse('filespairview-list')
        data ={
            #some valid data
        }
        response = self.client.post(url, data)
        self.assertEqual(response.status_code, status.HTTP_201_CREATED)


#urls
router.register(r'filesPairView', views.filesPairView, basename='filespairview')

Заметьте, что хитрость здесь заключается в использовании basename, который обычно стоит в единственном числе, что дает следующий результат, основанный на REST:

  • reverse('filespairview-list') -> /filesPairView/ - GET - Перечислить все
  • reverse('filespairview-list') -> /filesPairView/ - POST - - Создать
  • reverse('filespairview-detail') -> /filesPairView/{int:pk}/ - - GET - Получить один
  • reverse('filespairview-detail') -> /filesPairView/{int:pk}/ - - POST - Обновить один
  • reverse('filespairview-detail') -> /filesPairView/{int:pk}/ - - PATCH - Обновление частичное
Вернуться на верх