首页 > 解决方案 > method() 接受 1 个位置参数,但在分页装饰器操作中给出了 2 个

问题描述

我在 django rest 框架中做一个关于动作装饰器的分页器时遇到问题,我找不到解决方案,问题是它给了我以下错误:

get_response_data () 接受 1 个位置参数,但给出了 2 个

class InterfacesViewSet(viewsets.ModelViewSet):

    queryset = Interfaces.objects.all()
    serializer_class = InterfaceSerializer
    pagination_class = PostPageNumberPagination

    def get_response_data(paginated_queryset):
        data =[ {
            'id_interface': interface.id_interface,
            'id_EquipoOrigen': interface.id_EquipoOrigen_id,
            'EquipoOrigen': interface.id_EquipoOrigen.nombre,
            'LocalidadOrigen': interface.id_EquipoOrigen.localidad,
            'CategoriaOrigen': interface.id_EquipoOrigen.categoria,
            'id_PuertoOrigen': interface.id_PuertoOrigen_id,
            'PuertoOrigen': interface.id_PuertoOrigen.nombre,
            'estatus': interface.estatus,
            'etiqueta_prtg': interface.etiqueta_prtg,
            'grupo': interface.grupo,
            'if_index': interface.if_index,
            'bw': interface.bw,
            'bw_al': interface.bw_al,
            'id_prtg': interface.id_prtg,
            'ospf': interface.ospf,
            'description': interface.description,
            'id_EquipoDestino': interface.id_EquipoDestino_id,
            'EquipoDestino': interface.id_EquipoDestino.nombre,
            'LocalidadDestino': interface.id_EquipoDestino.localidad,
            'CategoriaDestino': interface.id_EquipoDestino.categoria,
            'id_PuertoDestino': interface.id_PuertoDestino_id,
            'PuertoDestino': interface.id_PuertoDestino.nombre,
            'ultima_actualizacion': interface.ultima_actualizacion,
        } for interface in queryset]

        return data

    @action(methods=['get'], detail=False, url_path='registros-data-table', 
    url_name='registros_data_table')
    def registros_data_table(self, request):
        queryset = Interfaces.objects.all()

        page = self.paginate_queryset(queryset)
        if page is not None:
            data = self.get_response_data(page)
            return self.get_paginated_response(data)

        data = self.get_response_data(queryset)
        return Response(data)    

标签: djangodjango-rest-framework

解决方案


函数get_response_data需要 1 个位置参数,但您使用两个 - objectself和 list调用它page

data = self.get_response_data(page)

这是显示此问题的较短示例代码:

class Example:
    def test(*args):
        print(args)

    def run(self):
        self.test("my string")


Example().run()
# (<__main__.Example object at 0x10320b160>, 'my string')

要解决此问题,您可以更改函数签名以包含self位置参数:

def get_response_data(self, paginated_queryset):

推荐阅读