Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

642
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda