Могу ли я написать один набор представлений для 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]/