Два ViewSet в одном url

Я пытаюсь построить urlpatterns, используя два набора представлений. Допустим, у меня есть:

class ArticleViewSet(ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

class CommentViewSet(ModelViewSet):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = [IsAuthenticated]

и я хотел бы создать url следующим образом:

/article/{article_id}/comments

Чтобы просто добавить много комментариев к выбранной статье и, например, иметь возможность также удалять комментарии по:

/article/{article_id}/comments/{comment_id)

Как должен выглядеть мой urls.py?

Попробуйте что-нибудь вроде:

Для urls.py

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from my_app import views

articles_router = DefaultRouter()
articles_router.register(r'articles', views.ArticleViewSet, basename="articles")
comments_router = DefaultRouter()
comments_router.register(r'comments', views.CommentsViewSet, basename="comments")

urlpatterns = [
    path('', include(articles_router.urls)),
    path('articles/<int:article_id>', include(comments_router.urls))
]

Для views.py:

class ArticleViewSet(ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSerializer

class CommentViewSet(ModelViewSet):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        queryset = super().get_queryset()
        article_id = self.kwargs.get("article_id")
        if not article_id:
            return queryset

        article = get_object_or_404(Article, id=article_id)
        return queryset.filter(article_id=article_id)
Вернуться на верх