gpt4 book ai didi

python - 另一个无法解析超链接关系错误的 URL

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:22 25 4
gpt4 key购买 nike

是的,我知道类似的问题已经被问过很多次,但很抱歉没有一个答案真正帮助到我,或者我错过了一些重要的事情。

我想在客户端发布的数据格式为以下格式时进行注册:

{
"email": "asouausdhnsabnsmsd.s@s.com",
"first_name": "s",
"last_name": "d",
"password": "f"
}

和服务器返回:

{
"results": {
"email": "asouausdhnsabnsmsd.s@s.com",
"first_name": "s",
"last_name": "d"
}
}

当我发布数据时,我得到:

ImproperlyConfigured at /api/register Could not resolve URL for hyperlinked relationship using view name "customuser-detail". 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 RegisterUserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = CustomUser
fields = ('url', 'email', 'first_name', 'last_name', 'password')
write_only_fields = ('password',)

def create(self, validated_data):
user = CustomUser.objects.create(**validated_data)
try:
user.set_password(user.password)
user.save()
return user
except KeyError:
return user


class RegisterUserRetrieveSerializer(serializers.Serializer):
results = RegisterUserSerializer(source='*')

然后 views.py 中的 api View 集:

class RegisterUserViewSet(mixins.CreateModelMixin,
viewsets.GenericViewSet):
permission_classes = (AllowAny,)
parser_classes = (parsers.JSONParser,)
serializer_class = serializers.RegisterUserSerializer
model = CustomUser

def create(self, request):
serializer = serializers.RegisterUserSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
user = serializer.save()
serializer = serializers.RegisterUserRetrieveSerializer(user, context={'request': request})
results = serializer.data
return Response(results, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

和 urls.py:

router = routers.DefaultRouter()
router_without_trailing_slashes = routers.DefaultRouter(trailing_slash=False)
router.register(r'register', RegisterUserViewSet, base_name='customuser')
router_without_trailing_slashes.register(r'register', RegisterUserViewSet, base_name='customuser')

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^templates/', include('core.main.urls'), name='templates'),

url(r'^api/', include(router_without_trailing_slashes.urls)),
url(r'^api/', include(router.urls)),
]

新用户已正确保存到数据库中,因此我认为该错误与 RegisterUserRetrieveSerializer 有某种关联。有什么想法吗?

最佳答案

看起来问题在于您在序列化程序中包含了 url 字段,但 DRF 无法生成该 url,因为没有序列化程序的详细 View 。

有两种选择:

  1. 从序列化程序中删除 url 字段
  2. 将 mixins.RetrieveModelMixin 添加到 ViewSet,以便序列化程序可以为实例生成详细 url

关于python - 另一个无法解析超链接关系错误的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32823419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com