2016-11-10 71 views
0

我有用户创建序列化程序,但它仍然是返回密码和c_password字段。我如何删除这个回应。Django休息创建后删除密码

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对象。但它正在用密码返回序列化程序对象。

+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,如果不行的话会给出一个错误 –