Я хотел создать уникальное поле электронной почты для модели пользователя django по умолчанию. Поэтому я сделал это unique_together=[('email',)]
. Теперь в сериализаторе я хочу, чтобы это поле read_only. Но Джанго Rest Framework 3.0 Docs говорит:Поле read_only в сериализаторе отдыха django with unique_together contraint
Существует особый случай, когда поле только для чтения является частью unique_together ограничения на уровне модели. В этом случае поле требуется классом сериализатора для проверки ограничения , но также не может быть доступно для редактирования пользователем.
Правильный способ справиться с этим - указать поле явно на сериализаторе, предоставляя как аргументы read_only = True, так и default = ... .
Одним из примеров этого является только для чтения отношения к текущим аутентифицированному пользователю, который является unique_together с другим идентификатором. В этом случае вы бы объявить поле пользователя следующим образом:
пользователя = serializers.PrimaryKeyRelatedField (read_only = True, по умолчанию = serializers.CurrentUserDefault())
serializers.CurrentUserDefault() представляет собой текущий пользователь. Я хочу установить по умолчанию в качестве электронной почты пользователя. Не соответствует serializers.CurrentUserDefault()
, эквивалентному request.user
. serializers.CurrentUserDefault().email
дает ошибку 'CurrentUserDefault' object has no attribute 'email'
Как установить email по умолчанию в качестве электронного адреса пользователя?
Можете ли вы решить эту проблему? или Вы находите любое другое решение? –