Reputation: 115
I'm having this issue with Django Rest Framework and i don't get how to solve it. So, i want to pass more than 1 value through my API URL like this:
urls.py
url(r'^api/resource/(?P<value1>\w+)/resourcetwo/(?P<value2>[\w-]+)/$', views.Example.as_view()),
In views.py i have this:
class Example(APIView):
def get_object(self, *args, **kwargs):
try:
value1 = kwargs.get('value1')
value2 = kwargs.get('value1')
return Model.objects.get(value1=value1)
except Model.DoesNotExist:
raise NotFound
def get(self, request, value1, value2, format=None):
queryset = self.get_object(value1, value2)
serializer = ModelSerializer(queryset)
return Response(serializer.data)
The issue is that i don't even get to my get_object because i have the following error from rest_framework.views:
file "../env/lib/python3.8/site-packages/rest_framework/views.py", line 502, in dispatch
response = handler(request, *args, **kwargs)
TypeError: get() got an unexpected keyword argument 'value1'
I have tried with the following configuration also:
path('api/resource/<int:value1>/resourcetwo/<int:value2>', views.Example.as_view()),
def get_object(self, value1, value2):
try:
#... rest of the func.
But i have the same error from rest_framework views, so how this should be implemented?
Thanks for your help!
Upvotes: 0
Views: 477
Reputation: 3378
your method signature for get is incorrect. And you don't have to pass anything to get_object method.
change your code to:
class Example(APIView):
def get_object(self):
try:
value1 = self.kwargs.get('value1')
value2 = self.kwargs.get('value1')
return Model.objects.get(value1=value1)
except Model.DoesNotExist:
raise NotFound
def get(self, request, *args, **kwargs):
instance = self.get_object()
serializer = ModelSerializer(instance)
return Response(serializer.data)
Upvotes: 1