Я новичок в Django Rest_Framework. Я пытаюсь реализовать представление на основе функций, но сталкиваюсь с проблемой с методом put - PullRequest
0 голосов
/ 13 марта 2020

Я хочу знать, как получить доступ к определенному объекту по определенному идентификатору, а затем обновить его. В настоящее время я получаю сообщение об ошибке «Метод 405. Не разрешен».

Возможно ли получить доступ к объекту через идентификатор, как упомянуто выше, или мне нужно подойти к проблеме по-другому?

Мой код выглядит следующим образом:

views.py

from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from home.models import example
from home.serializers import exampleSerializer

@api_view(['GET', ])
def exampleview(request):
    try:
        ex=example.objects.all()
    except example.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method=="GET":
        serializer=exampleSerializer(ex, many=True)
        return Response(serializer.data)

@api_view(['PUT', ])
def exampleputview(request):
    try:
        ex1=example.objects.get(id=id)
    except example.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method=="PUT":
        serializer=exampleSerializer(ex1, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(status=status.HTTP_404_NOT_FOUND)

urls.py
from django.contrib import admin
from django.conf.urls import url
from home import views

urlpatterns = [
    url('admin/', admin.site.urls),
    url('home/',views.exampleview),
    url('home/<int:id>/',views.exampleputview),
]

1 Ответ

1 голос
/ 13 марта 2020

Методу PUT необходимо значение идентификатора, как вы упомянули в URL,

Попробуйте ввести id в параметрах вашей функции

@api_view(['PUT', ])
def exampleputview(request, id):
    try:
        ex1=example.objects.get(id=id)
    except example.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method=="PUT":
        serializer=exampleSerializer(ex1, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(status=status.HTTP_404_NOT_FOUND)
...