gpt4 book ai didi

django - 如何在 Django Rest Framework 中的操作中进行分页

转载 作者:行者123 更新时间:2023-12-03 15:44:13 24 4
gpt4 key购买 nike

下午好社区,我有一个关于 django rest 框架页面的问题,在这种情况下,我设法在 View 集中做到了,但在集体行动中我未能实现。

附上 django rest 框架中答案的图片

enter image description here

行动

enter image description here

class PostPageNumberPagination(PageNumberPagination):
page_size=10

class InterfacesViewSet(viewsets.ModelViewSet):

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

# La siguiente funcion es un decorador(funciones extra) de la clase RegistrosViewSet para poder manipular los datos que voy a presentar de acuerdo a la URL que se le asigne con el url_path
# El siguiente action actua para poder presentar todos los datos de todos los objetos
@action(methods=['get'],detail=False,url_path='registros-data-table',url_name='registros_data_table')
def registros_data_table(self, request):
paginator=PostPageNumberPagination
return Response(
{
'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 Interfaces.objects.all()
)

更新 : 我做了 friend @bdoubleu 提供的方法,但是我发现对象没有被分页,也就是说在所有页面中出现的对象总数。

enter image description here

enter image description here

最佳答案

首先将响应数据移到它自己的函数中,因为您将使用它两次。更好的解决方案是为操作创建一个序列化程序。

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

然后,您将按照与在 mixins.ListModelMixin 中内置的 rest 框架相同的方式进行分页。 .
@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)

关于django - 如何在 Django Rest Framework 中的操作中进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57222981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com