2016-06-25 3 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_fields не оказывает никакого воздействия на password; он всегда возвращается.

Есть ли способ сохранить пароль только для записи и удалить его из результата?

ответ

0

Я решил его удалением write_only_fields и модифицировал поле само по write_only:

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

Я понятия не имею, почему write_only_fields и extra_kwargs не работал.

0

Это не сработало, потому что атрибут Meta класса write_only_fields только отменяет неявные поля (те, которые перечислены только в классе fields атрибутов Meta, а не определенные в ModelSerializer охват) write_only атрибута быть True. Если вы объявляете поле 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",) 
Смежные вопросы