Django "Метод \"POST\" не разрешен".

Когда я тестирую свои конечные точки с помощью Postman, я получаю сообщение "Метод "POST" не разрешен", когда пытаюсь создать новый грузовик с помощью моей функции createTruck. Я могу удалять, обновлять и получать грузовики из моей базы данных. Также я могу создать новый грузовик в Django Admin.

views.py

@api_view(['POST'])
def createTruck(request):
    data = request.data
    user = request.user

    truck = Truck.objects.create(
        user=user,
        image=data['image'],
        make=data['make'],
        prototype=data['prototyp'],
        year=data['year'],
        serviceInterval=data['serviceInterval'],
        nextService=data['nextService'],
        seats=data['seats'],
        bedLength=data['bedLength'],
        color=data['color'],
        vin=data['vin'],
        currentMileage=data['currentMileage']
    )
    print("request", request)

    serializer = TruckSerializer(truck, many=False)
    return Response(serializer.data)


@api_view(['DELETE'])
def deleteTruck(request, pk):
    truck = Truck.objects.get(id=pk)
    truck.delete()
    return Response('Truck Deleted!')

urls.py

urlpatterns = [
    path('trucks/', views.getTrucks, name="trucks"),
    path('trucks/<str:pk>/', views.getTruck, name="truck"),
    path('trucks/create/', views.createTruck, name="create-truck"),
    path('trucks/delete/<str:pk>/', views.deleteTruck, name="delete-truck"),
    path('trucks/update/<str:pk>/', views.updateTruck, name="update-truck"),
]

Возможно, я неправильно передаю пользователя, но я не уверен. Спасибо заранее.

Просто измените шаблон URL. Конфликт шаблона URL заключается в том, что create-truck-pattern пытается получить грузовик с помощью pk:create. Стандартное решение - изменить тип pk с str на int. Но другое решение - изменить приоритет URL в шаблонах и переместить create-truck на ступеньку выше.

Рекомендуемое решение:

urlpatterns = [
    path('trucks/', views.getTrucks, name="trucks"),
    path('trucks/<int:pk>/', views.getTruck, name="truck"),
    path('trucks/create/', views.createTruck, name="create-truck"),
    path('trucks/delete/<str:pk>/', views.deleteTruck, name="delete-truck"),
    path('trucks/update/<str:pk>/', views.updateTruck, name="update-truck"),
]

другое решение:

urlpatterns = [
    path('trucks/', views.getTrucks, name="trucks"),
    path('trucks/create/', views.createTruck, name="create-truck"),
    path('trucks/<str:pk>/', views.getTruck, name="truck"),
    path('trucks/delete/<str:pk>/', views.deleteTruck, name="delete-truck"),
    path('trucks/update/<str:pk>/', views.updateTruck, name="update-truck"),
]
Вернуться на верх