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:
Мой вопрос: Почему 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)