Django Swagger не позволяет мне использовать метод POST (не отображаются параметры)

Я использую djangorestframework вместе с модулями drf-spectacular для проекта Django, и я пытаюсь создать несколько основных методов API для моей модели Project. Ее структура выглядит следующим образом:

from django.db import models

# Create your models here.

class Project(models.Model):
    title = models.CharField(max_length = 128)
    description = models.TextField()
    image = models.URLField()
    date = models.DateTimeField(auto_now_add=True)

У меня также есть сериализатор для модели, выглядящий следующим образом:

from rest_framework import serializers
from api.models.Project import Project


class ProjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = Project
        fields = ['title', 'description', 'image', 'date']

Затем, в views.py, я создал две функции: project_list_view, которая либо позволяет получить все Project объекты из базы данных, либо позволяет ПОСТИТЬ новый объект. И, наконец, project_detail_view, которая позволяет получить Project объект, введя его pk (целое число id). Вот две мои функции:

@api_view(['GET', 'POST'])
def project_list_view(request):
    if request.method == 'GET':
        projects = Project.objects.all()
        serializer = ProjectSerializer(projects, many=True)
        return Response(serializer.data)

    elif request.method == "POST":
        serializer = ProjectSerializer(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)

@api_view(['GET'])
def project_detail_view(request, pk):
    if request.method == "GET":
        try:
            project = Project.objects.get(pk = pk)
            serializer = ProjectSerializer(project, many = False)
            return Response(serializer.data, status = status.HTTP_200_OK)
        except:
            return Response(status=status.HTTP_404_NOT_FOUND)

GET из project_list_view и project_detail_view работают, но моя проблема заключается в методе POST. Мой Swagger настроен на отображение схемы API при обращении к http://127.0.0.1:8000/docs/, и, как я уже сказал, методы GET работают правильно, но когда я пытаюсь нажать "Try it out" в методе POST, поля не отображаются. Я могу только нажать "Выполнить", не имея возможности ничего завершить. После того как я нажимаю на "Execute", Swagger возвращает ответ 404 Bad Request.

Вот как выглядит POST в Swagger:

enter image description here

Мой вопрос: Почему Swagger не отображает поля для каждого параметра модели? Спасибо.

Swagger Захватывает поля из переменной serializer_class. Я очень рекомендую вам изменить формат на Class-Based Views. Что-то, использующее mixins или generic class.

Ваш взгляд может быть таким

class ProjectView(mixins.RetrieveModelMixin, mixins.CreateModelMixin, viewsets.GenericViewSet):

    permission_classes = [permissions.IsAuthenticated, ] 
    serializer_class = ProjectSerializer
    queryset = Project.objects.all()

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

Далее о миксинах и общих представлениях

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