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

Python 另一个无法解析超链接关系的URL错误,python,django,django-rest-framework,Python,Django,Django Rest Framework,是的,我知道类似的问题已经被问了很多次,但我很抱歉,没有一个答案真的对我有帮助,或者我错过了一些重要的东西 当从客户端发布的数据采用以下格式时,我要进行注册: { "email": "asouausdhnsabnsmsd.s@s.com", "first_name": "s", "last_name": "d", "password": "f" } 和服务器返回: { "results": { "email": "asouausdhnsa

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

当从客户端发布的数据采用以下格式时,我要进行注册:

{
    "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"
    }
}
当我发布我得到的数据时:

在/api/register处配置不当,无法解析的URL 使用视图名称“customuser detail”的超链接关系。你可以 未能将相关模型包括在API中,或错误 在此字段上配置了
lookup\u字段
属性

所以我有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视图集:

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)
和url.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)),
]
新用户被正确地保存到db中,因此我认为错误与RegisterUserRetrieveSerializer有关。
有什么想法吗?

问题似乎是您在序列化程序中包含了
url
字段,但DRF无法生成该url,因为没有序列化程序的详细视图

有两种选择:

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