Как установить поле электронной почты как lookup_field в DRF? - PullRequest
0 голосов
/ 16 апреля 2019

Мне нужна 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

1 Ответ

0 голосов
/ 19 апреля 2019

По умолчанию "."не разрешено в регулярных выражениях поиска (django-rest-framework.org/api-guide/routers), вам следует изменить поле «lookup_value_regex», чтобы разрешить знаки пунктуации («.»).По умолчанию это «[^ /.] +», Поэтому вам нужно удалить знак пунктуации («.») Из «[^ /] +».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...