Как получить URL к методу действия из ModelViewSet (Django Rest Framework) с обратной функцией? - PullRequest
2 голосов
/ 25 сентября 2019

У меня есть класс ModelViewSet:

class DriveInvoiceViewSet(viewsets.ModelViewSet):
    filter_fields = ('location_id', 'logical_deleted')
    permission_classes = (UserCanManageFacilityPermission,)
    pagination_class = None

    def get_serializer_class(self):
        ...

    def get_queryset(self):
        ...

    @action(detail=False, methods=['GET'])
    def get_subtotals_by_unit(self, request):
        invoices_list = self.filter_queryset(self.get_queryset())
        grouped_invoices = get_subtotals_by_unit(invoices_list)

        return Response(grouped_invoices)

Как получить URL-адрес из функции обратного просмотра для проверки действия get_subtotals_by_unit ?

ViewSet, зарегистрированныйrouter router.register ('drive_invoices', DriveInvoiceViewSet, base_name = 'drive_invoices')

1 Ответ

1 голос
/ 25 сентября 2019

Немного измените декоратор action, как показано ниже,

class DriveInvoiceViewSet(viewsets.ModelViewSet):
    # other code
    @action(detail=False, methods=['GET'], <b>url_path="/some/path/", url_name="some-view-name"</b>)
    def get_subtotals_by_unit(self, request):
        invoices_list = self.filter_queryset(self.get_queryset())
        grouped_invoices = get_subtotals_by_unit(invoices_list)
        return Response(grouped_invoices)

Таким образом, DRF создаст шаблон URL с именем представления с синтаксисом <router_base_name>-<action_view_name>

Таким образом, имя представления в вашем случае будет drive_invoices-some-view-name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...