TypeError at /pet/3/ petAPI() got an unexpected keyword argument 'pk' Django

Я новичок в Django и его REST Framework, я пытаюсь разработать API, который позволит мне выполнять основные операции CRUD, оба метода GET, POSt и PUT работают правильно, однако когда я пытаюсь реализовать метод DELETE, я получаю очень специфическую ошибку:

Это мой основной файл 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),
]

Вот мой файл 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)

А я пытаюсь проверить метод delete следующим образом:

enter image description here

Простите мое невежество, есть ли у кого-нибудь идеи, почему он принимает метод DELETE за GET и не позволяет мне удалить запись из базы данных?

Имя параметра URL - pk, а не id. Действительно, если мы посмотрим на шаблон пути, то увидим:

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

Таким образом, вам следует изменить подпись на:

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

и использовать pk вместо id в функции.

измените значение в url.py

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

от pk к id

Вернуться на верх