2016-11-10 4 views
0

У меня есть пользовательский сериализатор, но все же он возвращает поля пароля и c_password. Как я могу удалить это для ответа.Django rest удалить пароль после создания

class UserCreateSerializer(ModelSerializer): 
    phone = CharField(label='Phone number') 
    password = CharField(label='password') 
    c_password = CharField(label='confirm passowrd') 

    class Meta: 
     model = User 
     fields = [ 
      'phone', 
      'username', 
      'password', 
      'c_password' 
     ] 

     extra_kwargs = {"password": {"write_only": True}, 
         "c_password": {"write_only": True}} 

    def create(self, validated_data): 
     phone = validated_data['phone'] 
     username = validated_data['username'] 
     password = validated_data['c_password'] 

     user_obj = User(phone=phone, username=username) 
     user_obj.set_password(password) 
     user_obj.save() 

     return validated_data 

class UserCreateAPIView(CreateAPIView): 
    permission_classes = [AllowAny] 
    serializer_class = UserCreateSerializer 
    queryset = User.objects.all() 

И еще я попытался добавить метод perform_create и возвратил пользовательский объект Response. но он возвращает объект serializer с паролями.

+0

Каково ваше мнение? – e4c5

+0

Отредактировано с учетом –

ответ

1

Вы возвращаете проверенные данные в свой метод create. Если вы хотите только объект пользователя, просто верните его. Например:

class UserCreateSerializer(ModelSerializer): 
    phone = CharField(label='Phone number') 
    password = CharField(label='password') 
    c_password = CharField(label='confirm passowrd') 

    class Meta: 
     model = User 
     fields = [ 
      'phone', 
      'username', 
      'password', 
      'c_password' 
     ] 

     extra_kwargs = {"password": {"write_only": True}, 
         "c_password": {"write_only": True}} 

    def create(self, validated_data): 
     phone = validated_data['phone'] 
     username = validated_data['username'] 
     password = validated_data['c_password'] 

     user_obj = User(phone=phone, username=username) 
     user_obj.set_password(password) 
     user_obj.save() 

     return user_obj 
+0

Извините c_password, не включенный в пользовательскую модель. Я просто добавил пароль для подтверждения. и если я вернусь user_obj. это дает мне ошибку. c_password не является полем пользователя. c_password только для проверки. Я также объявляю c_password в полях, если notit даст ошибку –

Смежные вопросы