2016-06-04 30 views
5

Tôi cố gắng đăng ký người dùng và mã thông báo trả về và id người dùng. Làm việc đó như thế nàyDjango Rest Framework - trả lại id người dùng và mã thông báo sau khi đăng ký

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) 

Và tôi nhận được một lỗi

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 

Tôi đang làm gì sai?

Trả lời

3

Sai lầm là trong dòng

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

Thứ nhất, không có trường tên user trên mô hình User của bạn. Thứ hai, bạn không cần phải lọc trên mô hình User để có được người dùng được tạo như bạn đã có người dùng với bạn trong serializer.instance. Vì vậy, không có nhu cầu cho dòng đó.

Nếu bạn chỉ muốn id, bạn có thể nhận được điều đó bằng cách sử dụng serializer.instance.id.

+1

Có, điều đó rất hữu ích, cảm ơn! –

Các vấn đề liên quan