我需要user-detail
url端点为api/email/user@gmail.com
; api/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/