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

455
Views
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 answers
Answer question

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 Report

0

cambiar el valor en url.py

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

de pk a id

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!