Ошибка возникает из-за того, что вы передаете pk как параметр в методе put.
def put(self,request,pk):
Вместо этого используйте это:
def put(self, request, *args, **kwargs):
А для получения pk из переданного URL используйтеэто:
pk = self.kwargs.get('pk')
Таким образом, ваш код должен выглядеть следующим образом:
def put(self,request, *args, **kwargs):
pk = self.kwargs.get('pk')
save_allowance = get_object_or_404(Allowance.objects.all(), pk=pk)
data = request.data.get('allowance')
serializer = AllowanceSerializer(instance=save_allowance,data=data,partial=True)
if serializer.is_valid():
allowance_saved=serializer.save()
return Response({"success":"Allowance '{}' updated successfully".format(allowance_saved.AllowID)})
else:
return Response({"fail":"'{}'".format(serializer.errors)})
Кроме того, измените порядок шаблонов URL:
urlpatterns = [
url(r'^allowances_mas/(?P<pk>\d+)/$', AllowanceAPIView.as_view()),
url(r'^allowances_mas/', AllowanceAPIView.as_view()),
]