2016-06-04 9 views
5

Próbuję zarejestrować użytkownika i przywrócić token i identyfikator użytkownika. Robi to jak tenDjango Rest Framework - zwróć identyfikator użytkownika i token po rejestracji

from django.shortcuts import render 
from rest_framework.response import Response 
from rest_framework.authtoken.models import Token 
from rest_framework import status 
from django.contrib.auth import get_user_model 

User = get_user_model() 

class CreateUser(CreateAPIView): 
    queryset = Profile.objects.all() 
    serializer_class = UserSerializer 

    def create(self, request, *args, **kwargs): 
     serializer = self.get_serializer(data=request.data) 
     serializer.is_valid(raise_exception=True) 
     self.perform_create(serializer) 
     headers = self.get_success_headers(serializer.data) 
     token, created = Token.objects.get_or_create(user=serializer.instance) 
     user = User.objects.filter(user=serializer.instance) 
     return Response({'token': token.key, 'id':user.id}, status=status.HTTP_201_CREATED, headers=headers) 

I pojawia się błąd

Cannot resolve keyword "user" into field. Choices are: auth_token, date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, password, user_permissions, username 

Co robię źle?

Odpowiedz

3

Błędem jest w linii

user = User.objects.filter(user=serializer.instance) 

Po pierwsze, nie ma pola o nazwie user modelu User. Po drugie, nie musisz filtrować modelu User, aby uzyskać utworzonego użytkownika, ponieważ już masz go przy sobie w serializer.instance. Tak więc nie ma potrzeby, aby ta linia.

Jeśli chcesz tylko id, możesz to zrobić, używając serializer.instance.id.

+1

Tak, to działa świetnie, dzięki! –