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
字段