#django #django-rest-framework #django-views #django-rest-viewsets
Вопрос:
Как я могу сделать два представления в DRF Generic viewset
использовании одних и тех же url_path и url_names при условии, что используются одни и те же или разные методы, но разные details
значения, например, оба могут быть Get
методами, но будут иметь details=True
и details=False
на них
пример кода для большей ясности;
@action(methods=["get"], detail=False, url_path="list-users", url_name="users")
def get_users(self, request):
# code here
@action(methods=["get"], detail=True, url_path="users", url_name="users")
def get_user(self, request, id):
# code here
get_users работают с этой конечной точкой -> {{base_url}}/{{prefix}}/users
get_user не работает с -> {{base_url}}/{{prefix}}/{{user-id}}/users
но если я изменю url_path и url_name на что-то другое, например — > single-user
тогда конечная точка для получения одного пользователя работает -> {{base_url}}/{{prefix}}/{{user-id}}/single-user
как я могу решить эту проблему, чтобы у пользователей и пользователя были одинаковые url_name и url_path, потому что действия детализированы как False
(пользователи) и True
(пользователь) для них обоих соответственно
NB; Also please note that this viewset does not make use of any model
Комментарии:
1.
url_name
должно быть уникальным для каждого вида
Ответ №1:
Итак, я понял это, у DRF на самом деле есть дополнительные методы маршрутизации HTTP для дополнительных действий, которые можно просмотреть здесь; https://www.django-rest-framework.org/api-guide/viewsets/#routing-additional-http-methods-for-extra-actions