Представления в Django Rest Framework поддерживают мой код в чистоте: я могу определить модель и затем набор представлений, чтобы согласиться с ней.
Однако, как мне лучше всего работать с моделями, которые иерархически подчиняются другой?Например: у меня есть Project
, у которого много File
с, и я хочу этот API:
GET /api/files
: получить все файлы во всех проектах GET /api/files/:id
:детализировать конкретный файл GET /api/projects/:id/files
: перечислить все файлы в проекте
Следующий код почти работает, за исключением того, что выходит URL для 3.as api/files/projects/:id
:
class FileViewSet(
mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
):
queryset = File.objects.all()
serializer_class = FileSerializer
@action(methods=["get"], url_path="projects/(?P<project_id>[^/.]+)", detail=False)
def list_for_project(self, request, project_id):
project = Project.objects.get(id=project_id)
# ... list only Files for this Project
Я рассмотрел несколько решений, таких как написание пользовательских маршрутизаторов, использование более чем одного набора или представления или пользовательских пакетов;но я удивлен, что это не так просто сделать с DRF "из коробки" за один Viewset
.Я пропускаю трюк?Что люди обычно делают в этом сценарии?