В моей модели профиля User
я включил поле show_email
явно. Таким образом, чтобы добавить эту функцию в моей API, класс UserSerializer выглядит следующим образом:Динамически включать или исключать поля класса Serializer
class UserSerializer(serializers.ModelSerializer):
email = serializers.SerializerMethodField('show_email')
def show_email(self, user):
return user.email if user.show_email else None
class Meta:
model = django.contrib.auth.get_user_model()
fields = ("username", "first_name", "last_name", "email")
Но мне не очень нравится. Я думаю, что было бы намного чище, если поле email
было бы полностью исключено из выхода сериализатора show_email
- False
, вместо этого показывающее это уродливое "email": null
вещь.
Как я мог это сделать?
Это, кажется, ответ OBSOLETE. В версии 3.2.1 по крайней мере нет метода 'restore_fields'. Вероятно, теперь лучший способ - использовать отдельные сериализаторы, применяемые в get_serializer view/set. И для этого отдельные сериализаторы используют наследование и в Meta modify через extra_kwargs, если что-то необходимо. – andi