2016-06-25 10 views
0

私はdjango-rest-frameworkを使用しています。私は、ネストされたデータとのシリアライザを持っていると私は特定のフィールド(パスワード)を非表示にする:結果からネストされたフィールドを隠す

class MyUser(models.Model): 
    # django's auth model 
    user = models.OneToOneField(User) 

class MyUserSerializer(serializers.ModelSerializer): 
    username = serializers.CharField(source="user.username") 
    password = serializers.CharField(source="user.password") 

    # Other fields related to MyUser model 

    class Meta: 
     model = MyUser 
     fields = (..., "password") 
     write_only_fields = ("password",) 

最初の問題は、私はfieldsからパスワードを削除した場合、それは私がpasswordを定義しているというエラーメッセージが表示されることですが、それが見つからないですfieldsのリストを参照してください。

write_only_fieldspasswordには何の効果もありません。それは常に返されます。

パスワードを書き込み専用にして結果から削除する方法はありますか?

答えて

0

Iは、write_only_fieldsを除去することによってそれを解決しWRITE_ONLYするフィールド自体を修飾:

password = serializer.CharField(source="user.password", write_only=True)

なぜwrite_only_fieldsextra_kwargsが機能しないのか分かりません。

0

Metaクラスのwrite_only_fields属性のみTrueであることを暗黙のフィールド(のみMetaクラスfields属性に記載されている、とModelSerializerスコープで定義されていないもの)write_only属性が上書きされますので、それは動作しませんでした。 ModelSerializerフィールドを明示的に宣言する場合は、それが機能するためにデフォルトではないすべての属性を定義する必要があります。

右のコードのようなものでなければなりません:

class MyUser(models.Model): 
    # django's auth model 
    user = models.OneToOneField(User) 

class MyUserSerializer(serializers.ModelSerializer): 
    username = serializers.CharField(source="user.username") 
    password = serializers.CharField(source="user.password", write_only=True) 

    # Other fields related to MyUser model 

    class Meta: 
     model = MyUser 
     fields = (..., "password") 
     write_only_fields = ("password",)