2016-06-25 3 views
0

Ich benutze django-rest-framework. Ich habe einen Serializer mit verschachtelten Daten und ich möchte ein bestimmtes Feld (Passwort) verstecken:Verstecktes Feld von Ergebnis ausblenden

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",) 

Das erste Problem ist, dass, wenn ich das Kennwort entfernen fields wird es sagen, Fehler, ich habe password definiert, aber es wird nicht gefunden in der fields Liste.

write_only_fields hat keine Auswirkungen auf password; es ist immer zurückgekehrt.

Gibt es eine Möglichkeit, das Passwort nur für den Schreibvorgang zu behalten und es aus dem Ergebnis zu entfernen?

Antwort

0

Ich löste es durch write_only_fields und modifiziert, um das Feld zu entfernen sich WRITE_ONLY:

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

Ich habe keine Ahnung, warum write_only_fields und extra_kwargs nicht funktioniert haben.

0

Es hat nicht funktioniert, weil das write_only_fields Attribut Meta Klasse nur die impliziten Felder überschreibt (diejenigen, die nur in den Meta Klasse aufgeführt sind fields Attribute, und nicht in dem ModelSerializer Umfang definiert) write_only Attribute True zu sein. Wenn Sie ein Feld ModelSerializer explizit deklarieren, müssen Sie alle Attribute definieren, die nicht standardmäßig sind, damit es funktioniert.

Der richtige Code sollte so etwas wie:

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",) 
Verwandte Themen