【发布时间】:2018-06-29 19:50:26
【问题描述】:
问题:
我收到这样的错误。
在 /api/users/ 处配置不正确
无法使用视图名称解析超链接关系的 URL “用户详细信息”。您可能未能将相关模型包含在 您的 API,或者错误地配置了
lookup_field属性 这个字段。
我读过这个post,但它没有用。
serializers.py
>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
urls.py
>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))
]
views.py
>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
来自我的 models.py 的片段
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
我尝试了什么:
我尝试将user-detail 更改为api:user-detail(是的api 命名空间确实存在于主urls.py 文件中)
【问题讨论】:
-
我知道您希望在
User序列化程序中有一个字段指向其配置文件的 URL,对吗? -
您是想让 url 指向用户详细信息视图还是用户个人资料详细信息视图?
-
@JessamynSmith 我正试图将其提供给用户详细信息,这就是为什么我选择
model作为User而不是UserProfile -
@dukebody 是的,就是这样
标签: django django-rest-framework