PUT-запрос Django Rest Framework возвращает 500, но обновляет данные - PullRequest
0 голосов
/ 11 ноября 2018

Я довольно новичок в Django REST Framework и попытался написать API для моего мобильного приложения. Я столкнулся с проблемой, когда запрос PUT работает нормально (обновляет данные), за исключением того, что он возвращает ответ 500 (Внутренняя ошибка сервера). Некоторые рекомендации по решению этой проблемы будут высоко оценены.

views.py

@csrf_exempt
def category_instance(request, pk):
    """
    Returns Category instance
    """
    try:
        cat = Category.objects.get(pk=pk)
    except Category.DoesNotExist:
        return HttpResponse("Error: category does not exist", status=404)

    if request.method == 'GET':
        serializer = CategorySerializer(cat, many=False)
        return JsonResponse(serializer.data, safe=False)

    elif request.method == 'PUT':
        serializer = CategorySerializer(cat, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, 200)
        return JsonResponse(serializer.errors, status=400)

    elif request.method == 'DELETE':
        cat.delete()
        return HttpResponse(status=204)

    else:
        return HttpResponse(status=400)

models.py:

class Category(models.Model):
    name = models.CharField(max_length=25, blank=False)

    class Meta:
        ordering = ('id',)

serializers.py:

class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ('id', 'name')

urls.py:

urlpatterns = [
    path('category/<int:pk>/', views.category_instance)
]

Я пытался найти похожие проблемы, которые могли возникнуть у других людей, но я не смог найти решение своей проблемы.


Traceback

Internal Server Error: /category/1/
Traceback (most recent call last):
  File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\core\handlers\exception.py", line 34,
 in inner
    response = get_response(request)
  File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\core\handlers\base.py", line 126, in
_get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\core\handlers\base.py", line 124, in
_get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\vaida\Documents\Coding\android-tm-api\venv\lib\site-packages\django\views\decorators\csrf.py", line 54, i
n wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\vaida\Documents\Coding\android-tm-api\android_tm_api\api\views.py", line 146, in category_instance
    serializer = CategorySerializer(cat, data=request.data)
AttributeError: 'WSGIRequest' object has no attribute 'data'

1 Ответ

0 голосов
/ 12 ноября 2018

Проблема была решена путем замены представлений универсальными представлениями на основе классов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...