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オブジェクトが返されました。シリアライザオブジェクトをパスワードで戻しています。

+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モデルに含まれていません。私は確認パスワードを取得するために追加しました。もし私がuser_objを返すなら。それは私にエラーを与えているc_passwordはユーザーフィールドではありません。 c_passwordは検証するだけです。私はフィールドにもc_passwordを宣言しました。もしnotitがエラーを出すならば –

関連する問題