Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

449
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

0

cambiar el valor en url.py

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

de pk a id

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda