Мне нужна user-detail
конечная точка URL как api/email/user@gmail.com
; api/email/user2@gmail.com
, но это не работает
Если я добавлю url
поле к классу сериализатора, то на странице user-list
у меня будет исключение: Could not resolve URL for hyperlinked relationship using view name "user-email". You may have failed to include the related model in your API, or incorrectly configured the
lookup_field attribute on this field.
Вот мой код:
serializers.py
class EmailSerializer(serializers.ModelSerializer):
"""
Профиль пользователя
"""
class Meta:
model = User
fields = ('url', 'email', )
read_only_fields = ('email', )
extra_kwargs = {
'url': {'view_name': 'user-email', 'lookup_field': 'email'}
}
views.py
class RetrieveModelViewSet(mixins.RetrieveModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
"""
действия просмотр
"""
pass
class EmailViewSet(RetrieveModelViewSet):
queryset = User.objects.all()
serializer_class = EmailSerializer
lookup_field = 'email'
urls.py
router.register(r'email', views.EmailViewSet, 'email')
Также я пытаюсь очистить поле электронной почты quote_plus
:
serializers.py
from urllib.parse import quote_plus
class EmailSerializer(serializers.ModelSerializer):
"""
Профиль пользователя
"""
email = quote_plus(serializers.EmailField(read_only=True))
class Meta:
model = User
fields = ('url', 'email', )
read_only_fields = ('email', )
extra_kwargs = {
'url': {'view_name': 'user-email', 'lookup_field': 'email'}
}
но у меня ошибка:
TypeError: quote_from_bytes() expected bytes