Reputation: 636
I'm fairly new to Django REST framework and I've tried to write an API for my mobile application. I'm facing an issue where a PUT request works fine (updates data) apart from the fact it returns response 500 (Internal Server Error). Some guidance towards resolving this would be much appreciated.
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)
]
I've tried to look for similar issues that other people may have had, but I was unable to construct a solution to my problem.
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'
Upvotes: 2
Views: 2901
Reputation: 636
The issue was resolved by replacing the views with generic class-based views instead.
Upvotes: 1