#python #django #django-rest-framework
#python #django #django-rest-framework
Вопрос:
Я собираюсь создать API, который выводит комментарии из сообщения только тогда, когда я отправляю запрос на маршрутизатор с комментариями, прикрепленными к значению pk сообщения. Итак, URL-адреса следующим образом. После написания py и views.py , я отправил запрос, и произошла ошибка 404. Как я могу получить комментарии, создав API? Вот код, который я создал.
urls.py
urlpatterns = [
path('post', CreateReadPostView.as_view({'post': 'create', 'get': 'list'})),
path('post/<int:pk>', UpdateDeletePostView.as_view({'put': 'update', 'patch': 'partial_update', 'delete': 'destroy'})),
path('post/<int:post.pk>/comments', CreateReadCommentView.as_view({'post': 'create', 'get': 'list'})),
] static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
views.py
class CreateReadCommentView (ModelViewSet) :
serializer_class = CommentSerializer
permission_classes = [IsAuthenticated]
queryset = Comment.objects.all()
def perform_create (self, serializer) :
serializer.save(author=self.request.user)
Комментарии:
1. вы можете проверить drf-nested-routers
2. поскольку у вас уже есть структура url, вы можете просто использовать
get_queryset()
метод переопределения и не использоватьdrf-nested-routers
библиотеку. Отправил ответ.
Ответ №1:
Вы можете переопределить get_queryset()
метод.
models.py
class Post(models.Model):
...
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
...
urls.py
urlpatterns = [
...
path('post/<int:post_id>/comments', CreateReadCommentView.as_view({'post': 'create', 'get': 'list'})),
]
views.py
class CreateReadCommentView (ModelViewSet):
serializer_class = CommentSerializer
permission_classes = [IsAuthenticated]
queryset = Comment.objects.all()
def perform_create(self, serializer):
serializer.save(author=self.request.user)
def get_queryset(self):
return super().get_queryset().filter(post=self.kwargs.get('post_id'))