У меня есть проект 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, который был передан в представление. Я не уверен, как интегрировать это в viewsets.
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