使用Django REST Framework获取用户详情返回404错误排查
问题
我需要通过Django REST Framework返回用户详情信息。我的views.py中定义了UserViewSet类如下:
class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer pagination_class = LimitOffsetPagination # permission_classes = (IsAdmin, ) search_fields = ('username',) lookup_field = 'username'
我的urls.py配置了如下路由:
from rest_framework.routers import DefaultRouter from .views import UserViewSet router = DefaultRouter() router.register(r'users', UserViewSet) urlpatterns = [ path('auth/', include(auth_patterns)), path('', include(router.urls)), ]
使用Postman请求users/1/时返回Not found,请问我哪里操作出错了?
解答
问题出在你设置了lookup_field = 'username',这会让DRF用用户名作为详情接口的匹配字段,而非默认的主键id。
你现在请求users/1/,DRF会去数据库里找username等于'1'的用户,显然不存在这类用户,所以返回404。
有两种解决方式:
- 如果你想保留用用户名查询详情,就把请求路径改成
users/[实际用户名]/,比如用户名为alex,就请求users/alex/ - 如果你想换回用id查询,直接删掉
lookup_field = 'username'这一行即可,DRF会默认用主键id匹配,此时users/1/就能正常返回对应用户信息
内容的提问来源于stack exchange,提问作者aleksander
相关产品推荐
相关产品推荐

