hem*_*emo 2 django django-rest-framework
我收到这样的错误.
在/ api/users /中配置不当
无法使用视图名称"user-detail"解析超链接关系的URL.您可能未能在API中包含相关模型,或者未
lookup_field在此字段上错误地配置属性.
我看了这篇文章,但它没有用.
class UserSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='user-detail',
lookup_field='profile')
class Meta:
model = User
fields = ('id', 'username', 'first_name', 'last_name', 'url')
class UserProfileSerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField(source='user.username')
class Meta:
model = UserProfile
fields = "__all__"
# user = serializers.ReadOnlyField(source='owner.username')
def create(self, validated_data):
pass
def update(self, instance, validated_data):
pass
Run Code Online (Sandbox Code Playgroud)
user_profile_list = UserProfileViewSet.as_view({
'get': 'list',
'post': 'create'
})
user_profile_detail = UserProfileViewSet.as_view({
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
})
user_list = UserViewSet.as_view({
'get': 'list'
})
user_detail = UserViewSet.as_view({
'get': 'retrieve'
})
user_profiles_detail = UserViewSet.as_view({
'get': 'profile'
})
router = DefaultRouter()
router.register(r'userprofiles', views.UserProfileViewSet)
router.register(r'users', views.UserViewSet)
urlpatterns = [
url(r'^', include(router.urls))
]
Run Code Online (Sandbox Code Playgroud)
class UserProfileViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
"""
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
pagination_class = LimitTenPagination
@detail_route(renderer_classes=[renderers.JSONRenderer])
def perform_create(self, serializer):
serializer.save(user=self.request.user)
class UserViewSet(viewsets.ReadOnlyModelViewSet):
"""
This viewset automatically provides `list` and `detail` actions
"""
queryset = User.objects.all()
serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
Run Code Online (Sandbox Code Playgroud)
我尝试更改user-detail为api:user-detail(api主urls.py文件中存在yes 命名空间)
看看文档,我相信你必须使用HyperLinkedRelatedField.另外,请参阅此相关的SO帖子.
您在序列化程序字段定义中混淆了参数.我认为应该是:
class UserSerializer(serializers.ModelSerializer):
url = serializers.HyperlinkedRelatedField(view_name='api:userprofile-detail',
source='profile')
Run Code Online (Sandbox Code Playgroud)添加了namespace api
| 归档时间: |
|
| 查看次数: |
2774 次 |
| 最近记录: |