python - 如何在DRF中将电子邮件字段设置为lookup_field?

标签 python django django-rest-framework

我需要user-detail url端点为api/email/user@gmail.comapi/email/user2@gmail.com,但它不起作用

如果我将 url 字段添加到序列化器类中,那么在 user-list 页面上我会遇到异常: 无法使用 View 名称解析超链接关系的 URL“用户电子邮件”。您可能未能在 API 中包含相关模型,或者错误地配置了该字段的lookup_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'}
        }

但是我有错误: 类型错误:quote_from_bytes()预期字节

最佳答案

默认为“.”在查找正则表达式 ( django-rest-framework.org/api-guide/routers ) 中不允许使用,您应该更改“lookup_value_regex”字段以允许标点符号(“.”)字符。默认值为“[^/.]+”,因此您需要从“[^/]+”中删除标点符号(“.”)。

关于python - 如何在DRF中将电子邮件字段设置为lookup_field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55714961/

相关文章:

python - 在 Django 应用程序中存储大数据的更好选择

python - 如何以编程方式在 django 1.7.6 中触发密码重置电子邮件?

python - 如何替换或编辑 django rest 框架路由器中的查找参数?

python - 在 Django 管理站点中显示 ManyToMany 对象的字段名称而不是整个对象

ntp 更新时间时 Python Twisted 应用程序中断

python - 为什么即使数据库中没有对象,django paginator.num_pages 也会返回一个?

python - Mypy 列表阴影

python - 将 __getitem__ 添加到模块

python - 尝试编译 The Powder Toy 时出现链接错误

django - FileUploadParser 没有得到文件名