Могу ли я написать один набор представлений для List, Retrieve, Update и Delete?

Я использую viewset.ModelViewSet для перечисления, получения, обновления и удаления объектов Car. У меня есть две ссылки: одна заканчивается .as_view({'get': 'list'}), а другая .as_view({'get': 'retrieve'}), и последняя используется для обновления и удаления объекта автомобиля. Это нормально (не вызовет ли это ошибок в будущем) или я должен переписать PUT и DELETE в другом представлении?

Смысл ViewSet заключается в том, чтобы иметь несколько конечных точек/сервисов, использующих один и тот же корневой URL. Для ModelViewSet это означает, что CRUD (Create, Read/List, Update/Patch, Delete) и любые пользовательские действия находятся в одном наборе представлений.

Однако, если вы используете ViewSet, я настоятельно рекомендую использовать маршрутизатор для сопоставления URL, например, так:

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register("cars", HealthcheckViewSet, "cars")

urlpatterns = [
    path("api/", include(router.urls), name="api"),
]

Тогда ваши URL будут иметь вид:

  • ПОСТ/СПИСОК: api/cars/
  • ОБНОВИТЬ/УДАЛИТЬ/ПРОЧИТАТЬ: api/cars/[id]/
Вернуться на верх