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

442
Vistas
TypeError en /pet/3/ petAPI() obtuvo un argumento de palabra clave inesperado 'pk' Django

Soy novato en Django y su REST Framework, estoy tratando de diseñar una API que me permita realizar las operaciones básicas del CRUD, tanto los métodos GET, POSt y PUT funcionan correctamente, sin embargo cuando trato de implementar el método DELETE Me sale un error muy particular:

Este es mi archivo principal urls.py:

 from django.conf.urls import url from django.urls import path from rest_framework_simplejwt.views import ( TokenObtainPairView, TokenRefreshView) from pethomeApp import views urlpatterns = [ path('login/', TokenObtainPairView.as_view()), path('refresh/', TokenRefreshView.as_view()), path('user/', views.UserCreateView.as_view()), path('pet/', views.petView.petAPI), path('pet/<int:pk>/', views.petView.petAPI), ]

Este es mi archivo petViwe.py:

 from rest_framework import status, views from django.shortcuts import render from django.views.decorators.csrf import csrf_exempt from rest_framework.parsers import JSONParser from django.http.response import JsonResponse from pethomeApp.models import Pet from pethomeApp.serializers import PetSerializer # Create your views here. @csrf_exempt def petAPI(request, id=0): if request.method == 'GET': if id == 0: pets = Pet.objects.all() serializer = PetSerializer(pets, many=True) return JsonResponse(serializer.data, safe=False) else: pet = Pet.objects.get(id=id) serializer = PetSerializer(pet) return JsonResponse(serializer.data, safe=False) elif request.method == 'POST': data = JSONParser().parse(request) serializer = PetSerializer(data=data) if serializer.is_valid(): serializer.save() return JsonResponse("Added successfuly", safe=False) return JsonResponse("Failed to add", safe=False) elif request.method == 'PUT': data = JSONParser().parse(request) pet = Pet.objects.get(id_pet=data['id_pet']) serializer = PetSerializer(pet, data=data) if serializer.is_valid(): serializer.save() return JsonResponse("Update successfuly", safe=False) return JsonResponse("Failed to update") elif request.method == 'DELETE': pet = Pet.objects.get(id_pet=id) pet.delete() return JsonResponse("Deleted successfuly", safe=False)

Y estoy tratando de probar el método de eliminación de esta manera:

ingrese la descripción de la imagen aquí

Disculpe mi ignorancia, ¿alguien tiene idea de por qué toma el método DELETE como GET y no me permite eliminar un registro de la base de datos?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El nombre del parámetro de URL es pk , no id . De hecho, si observamos el patrón de ruta, vemos:

 urlpatterns = [ path('pet/<int: pk >/', views.petView.petAPI), ]

Por lo tanto, debe cambiar la firma a:

 @csrf_exempt def petAPI(request , pk=0 ): # …

y use pk en lugar de id en la función.

over 4 years ago · Santiago Trujillo Denunciar

0

cambiar el valor en url.py

 path('pet/<int:id>/', views.petView.petAPI),

de pk a id

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