如何使用reverse函数从ModelViewSet(Django Rest Framework)获取动作方法的URL?

2024-04-20 03:55:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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)

如何从reverse函数中获取URL来测试按单位获取小计\u操作?你知道吗

路由器注册的视图集路由器.寄存器('drive\u invoices',driveinvoicesviewset,base\u name='drive\u invoices')


Tags: selfgetbydefunit路由器drivefilter
1条回答
网友
1楼 · 发布于 2024-04-20 03:55:51

稍微改变action装饰器,如下所示

class DriveInvoiceViewSet(viewsets.ModelViewSet):
    # other code
    @action(detail=False, methods=['GET'], url_path="/some/path/", url_name="some-view-name")
    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将用语法为<router_base_name>-<action_view_name>

因此,您案例中的视图名称将是,drive\u-invoices-some-view-name

相关问题 更多 >