Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

635
Views
Django Swagger no me permite usar el método POST (no se muestran parámetros)

Estoy usando djangorestframework junto con módulos drf-spectacular para un proyecto de Django, y estoy tratando de construir algunos métodos API básicos para mi modelo de Project . Su estructura se ve así:

 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)

También tengo un serializador para el modelo, con este aspecto:

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

Luego, en views.py , creé dos funciones: project_list_view , que le permite OBTENER todos los objetos del Project de la base de datos, o le permite PUBLICAR un nuevo objeto. Y, por último, project_detail_view , que le permite OBTENER un objeto de Project escribiendo su pk ( id entero). Estas son mis dos funciones:

 @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 de project_list_view y project_detail_view funcionan, pero mi problema radica en el método POST. Mi Swagger está configurado para mostrar su esquema de API al acceder a http://127.0.0.1:8000/docs/ y, como dije, los métodos GET funcionan correctamente, pero cuando trato de hacer clic en "Pruébelo" en el Método POST, los campos no se muestran. Solo puedo presionar "Ejecutar" sin poder completar nada. Después de hacer clic en "Ejecutar", Swagger devuelve una respuesta de 404 Bad Request .

Así es como se ve POST en Swagger:

ingrese la descripción de la imagen aquí

Mi pregunta es: ¿Por qué Swagger no muestra campos para cada parámetro del modelo? Gracias.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Swagger Toma los campos de una variable serializer_class . Realmente recomiendo que cambie el formato a Vistas basadas en clases. Algo usando mixins o clase genérica.

Su vista podría ser como

 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)

Más sobre mixins y vistas genéricas

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!