【发布时间】:2019-01-23 03:32:50
【问题描述】:
我有一个 django 项目,并且我已将 Django Rest Framework 集成到后端项目中。我有一个配置文件模型。在配置文件模型中,我有一个包含用户名字段的用户外键。用户名是我目前用于过滤配置文件的用户名。
当ListAPIView 和RetrieveAPIView 分开时,我的一切工作正常。
class ProfileListView(ListAPIView):
queryset = Profile.objects.all()
serializer_class = ProfileSerializer
class ProfileDetailView(RetrieveAPIView):
queryset = Profile.objects.all()
serializer_class = ProfileSerializer
def get_object(self):
return self.queryset.get(user__username=self.kwargs.get('username'))
另一件事是,当视图分离时,我在传递给视图的 url 中设置了一个用户名参数。我不确定如何将其集成到视图集中。
path('users/', UserListView.as_view()),
path('users/<username>', UserDetailView.as_view()),
这就是我现在所拥有的
router = DefaultRouter()
router.register(r'users', UserViewSet, basename='user')
router.register(r'profiles', ProfileViewSet, basename='profile')
urlpatterns = router.urls
我正在尝试更改我的代码,以便我希望使用一个通用视图集,而不是每个视图都分开,它是一个包含所有视图的单点。
当我在网络浏览器中使用查看 API 时,列表视图有效,但当我尝试搜索特定用户名时,出现错误。
DoesNotExist at /api/users/profiles/omarjandali/
Profile matching query does not exist.
Request Method: GET
Request URL: http://localhost:8000/api/users/profiles/omarjandali/
Django Version: 2.1.5
Exception Type: DoesNotExist
Exception Value:
Profile matching query does not exist.
Exception Location: /Users/omarjandali/anaconda3/envs/splittapp/lib/python3.7/site-packages/django/db/models/query.py in get, line 399
Python Executable: /Users/omarjandali/anaconda3/envs/splittapp/bin/python
Python Version: 3.7.2
Python Path:
['/Users/omarjandali/Documents/splittapp/backend/src',
'/Users/omarjandali/anaconda3/envs/splittapp/lib/python37.zip',
'/Users/omarjandali/anaconda3/envs/splittapp/lib/python3.7',
'/Users/omarjandali/anaconda3/envs/splittapp/lib/python3.7/lib-dynload',
'/Users/omarjandali/anaconda3/envs/splittapp/lib/python3.7/site-packages']
Server time: Wed, 23 Jan 2019 03:21:44 +0000
【问题讨论】:
-
self.queryset.get(user__username=self.kwargs.get('username'))中的问题。此错误告诉我们无法与此查询匹配。你能在self.kwargs.get('username')中显示价值吗?
标签: django django-rest-framework django-views