Reputation: 1443
I'm getting the above error when creating token, here's the code:
from rest_framework import generics, permissions
from rest_framework.response import Response
from knox.models import AuthToken
from .serializers import UserSerializer, RegisterSerializer
class RegisterAPI(generics.GenericAPIView):
serializer_class = RegisterSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)
})
what am I doing wrong here
Upvotes: 15
Views: 12962
Reputation: 4073
If you're using Django rest framework auth token do this:
from rest_framework.authtoken.models import Token
...
# The token will be in token variable, created variable will be a bool
token, created = Token.objects.get_or_create(user=request.user)
# Object of type Token is not JSON serializable, so convert token to string
token = str(token)
Upvotes: 1
Reputation: 1197
This particular error occurs because the Token.objects.create returns a tuple (instance, token). just use the second position [1] by using instead of former
"token": AuthToken.objects.create(user)[1]
Upvotes: 1
Reputation: 13555
Better way is use this method in python
_, token = AuthToken.objects.create(user)
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": token
})
Upvotes: 15
Reputation: 984
The Token.objects.create returns a tuple (instance, token). So in order to get token use the index 1
"token": AuthToken.objects.create(user)[1]
Upvotes: 47