Django - POST/GET для HyperlinkedIdentityField

Я пытался следовать нескольким руководствам

https://stackabuse.com/creating-a-rest-api-with-django-rest-framework/

https://www.django-rest-framework.org/tutorial/2-requests-and-responses/

Оба не подошли, потому что мой код использует HyperlinkedIdentityField

Как мне добавить к нему POST/GET запрос?

views.py

class SpecialityView(APIView):
    def get(self, request, id=None):
        if id:
            item = Speciality.objects.get(id=id)
            serializer_class = SpecialitySerializer(item)
            return Response({"status": "success", "data": serializer_class.data}, status=status.HTTP_200_OK)

        items = Speciality.objects.all()
        serializer_class = SpecialitySerializer(items, many=True)
        return Response({"status": "success", "data": serializer_class.data}, status=status.HTTP_200_OK)

    def post(self, request):
        serializer_class = SpecialitySerializer(data=request.data)
        if serializer_class.is_valid():
            serializer_class.save()
            return Response({"status": "success", "data": serializer_class.data}, status=status.HTTP_200_OK)
        else:
            return Response({"status": "error", "data": serializer_class.errors}, status=status.HTTP_400_BAD_REQUEST)


class WorkerView(APIView):
    def get(self, request, id=None):
        if id:
            item = Worker.objects.get(id=id)
            serializer_class = WorkerSerializer(item)
            return Response({"status": "success", "data": serializer_class.data}, status=status.HTTP_200_OK)

        items = Worker.objects.all()
        serializer_class = WorkerSerializer(items, many=True)
        return Response({"status": "success", "data": serializer_class.data}, status=status.HTTP_200_OK)

    def post(self, request):
        serializer_class = WorkerSerializer(data=request.data)
        if serializer_class.is_valid():
            serializer_class.save()
            return Response({"status": "success", "data": serializer_class.data}, status=status.HTTP_200_OK)
        else:
            return Response({"status": "error", "data": serializer_class.errors}, status=status.HTTP_400_BAD_REQUEST)

serializers.py

class SpecialitySerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Speciality
        fields = ['id', 'url', 'name']


class WorkerSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Worker
        fields = ['id', 'url', 'name', 'last_name', 'hire_date', 'email', 'phone_number', 'job', 'speciality', 'salary',
                  'commission_pct', 'manager_id', 'department_id']

Страница ошибки :

AssertionError at /speciality/
`HyperlinkedIdentityField` requires the request in the serializer context. Add `context={'request': request}` when instantiating the serializer.

Говорит об ошибке! Используйте это при вызове сериализатора в представлении:

WorkerSerializer(item, context={'request': request})

Зачем это нужно? Вам нужно request создать объект для сериализатора, поскольку некоторые поля нуждаются в нем для обработки.

Вернуться на верх