Созданная функция включена по умолчанию в CreateAPIView generi c view, или, если вы хотите предоставить список и создать функциональность, вы можете использовать ListCreateAPIView , который предоставляет и то, и другое. Подробнее об общих c просмотрах DRF * здесь .
class ProjectSchemeList(ListCreateAPIView):
serializer_class = SchemeDetailSerializer
def get_queryset(self, *args, **kwargs):
comp_logger.info('invoked scheme list all')
schemes = ProjectScheme.objects.all().order_by('-id')
return schemes
С этим определением вам не нужно будет вручную писать метод публикации.
Если вы хотите вручную определить метод публикации, вы можете изучить, как он написан в generi c CreateAPIView , и скопировать его, это немного отличается от того, как вы хотите его написать. Наконец, следующая ваша версия метода post с исправленными ошибками:
class ProjectSchemeList(ListAPIView):
serializer_class = SchemeDetailSerializer
def get_queryset(self, *args, **kwargs):
comp_logger.info('invoked scheme list all')
schemes = ProjectScheme.objects.all().order_by('-id')
return schemes
def post(self, request, *args, **kwargs):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Обратите внимание, как мы используем self.serializer_class (data = request.data) вместо просто serializer_class