Reputation: 445
I have the following model -
class Userdetails(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200, blank=True, null=True)
userno = models.CharField(max_length=200, blank=True, null=True
And following View -
@api_view(['GET', 'POST'])
def useroptions(request): # to create new user
if request.method == 'GET':
names = Userdetails.objects.values("name","userno","id")
return Response(names)
elif request.method == 'POST':
count = Userdetails.objects.count()
serializer = userdetailsSerializer(data=request.data)
usernos = Userdetails.objects.values("userno")
names = Userdetails.objects.values("name")
list_of_names = []
for ele in names:
list_of_names.append(ele["name"])
list_of_usernos = []
for ele in usernos:
list_of_usernos.append(ele["userno"])
This gives me this error on CMD -
Internal Server Error: /view/pardel/2/multiuser
Traceback (most recent call last):
File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/rest_framework/views.py", line 507, in dispatch
self.response = self.finalize_response(request, response, *args, **kwargs)
File "/home/hostbooks/django1/myproject/lib/python3.6/site-packages/rest_framework/views.py", line 422, in finalize_response
% type(response)
AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
[13/Feb/2020 08:09:14] "POST /view/pardel/2/multiuser HTTP/1.1" 500 17234
I am not getting the reason for this error and Please me to sort this error out.
Upvotes: 2
Views: 17153
Reputation: 2342
You are not returning http
response object for POST
request. From the django docs:
Each view you write is responsible for instantiating, populating, and returning an HttpResponse.
change your view to return http response for post request.
@api_view(['GET', 'POST'])
def useroptions(request): # to create new user
if request.method == 'GET':
names = Userdetails.objects.values("name","userno","id")
return Response(names)
elif request.method == 'POST':
count = Userdetails.objects.count()
serializer = userdetailsSerializer(data=request.data)
usernos = Userdetails.objects.values("userno")
names = Userdetails.objects.values("name")
list_of_names = []
for ele in names:
list_of_names.append(ele["name"])
list_of_usernos = []
for ele in usernos:
list_of_usernos.append(ele["userno"])
context = {'data': serializer.data, 'names': list_of_names, 'usernos': list_of_usernos} # change it as per your requirement
return Response(context)
Upvotes: 5
Reputation: 2011
You are getting this error because you are not returning from your view.
Code should be like this.
@api_view(['GET', 'POST'])
def useroptions(request): # to create new user
if request.method == 'GET':
names = Userdetails.objects.values("name","userno","id")
return Response(names)
elif request.method == 'POST':
count = Userdetails.objects.count()
serializer = userdetailsSerializer(data=request.data)
usernos = Userdetails.objects.values("userno")
names = Userdetails.objects.values("name")
list_of_names = []
for ele in names:
list_of_names.append(ele["name"])
list_of_usernos = []
for ele in usernos:
list_of_usernos.append(ele["userno"])
response_dict = {}
# update response_dict with whatever you want to send in response
return Response(response_dict)
Upvotes: 2