0

下午好我有以下查询,我正在使用 DRF 的库 Renderer-xlsx 生成一个 excel,我在传递相应的 url 时下载它,问题是我想对这个 excel 应用过滤器,所以我不下载数据库中的所有内容,但过滤器中显示的内容。

总结:我在前端有一个下载按钮(ANGULAR),我按下它,我指出过滤器,例如在 excel 中只有满足这个条件的记录(EquipoOriggen = C65CAN01)我将它作为请求传递并返回得到excel

在此处输入图像描述

如您所见,下载,但所有记录,我需要过滤器

我的序列化器

class InterfaceSerializer(serializers.ModelSerializer):
# Las siguientes lineas me permiten agregan campos de otros modelos al modelo en cuestion que estoty serializando a traves de llaves foraneas.
#Se le agrega la propiedad de read_only=True para que el campo no sea editable.
    EquipoOrigen = serializers.CharField(source='id_EquipoOrigen.nombre',read_only=True)
    PuertoOrigen = serializers.CharField(source='id_PuertoOrigen.nombre',read_only=True)
    LocalidadOrigen=serializers.CharField(source='id_EquipoOrigen.localidad',read_only=True)
    CategoriaOrigen=serializers.CharField(source='id_EquipoOrigen.categoria',read_only=True)
    EquipoDestino = serializers.CharField(source='id_EquipoDestino.nombre',read_only=True)
    PuertoDestino = serializers.CharField(source='id_PuertoDestino.nombre',read_only=True)
    LocalidadDestino=serializers.CharField(source='id_EquipoDestino.localidad',read_only=True)
    CategoriaDestino=serializers.CharField(source='id_EquipoDestino.categoria',read_only=True)
    Vendedor=serializers.CharField(source='id_EquipoOrigen.vendedor',read_only=True)
    class Meta:
        model=Interfaces
        fields=('id_interface','id_EquipoOrigen','EquipoOrigen','id_PuertoOrigen','PuertoOrigen','LocalidadOrigen','CategoriaOrigen','Vendedor','estatus','etiqueta_prtg','grupo','if_index','bw','bw_al','id_prtg','ospf','description','id_EquipoDestino','EquipoDestino','id_PuertoDestino','PuertoDestino','LocalidadDestino','CategoriaDestino','ultima_actualizacion',) 


class PostPageNumberPagination(PageNumberPagination):
    page_size=10
    page_size_query_param = 'page_size'
    max_page_size = 1000

#Funcion Para El Filtro del Modelo Interfaces.

class InterfacesFilter(filters.FilterSet):

    EquipoOrigen=filters.CharFilter(field_name='id_EquipoOrigen__nombre',lookup_expr='contains')
    LocalidadOrigen=filters.CharFilter(field_name='id_EquipoOrigen__localidad',lookup_expr='exact')
    Vendedor=filters.CharFilter(field_name='id_EquipoOrigen__vendedor',lookup_expr='exact')
#Declarando el Meta    
    class Meta:
        model=Interfaces
        fields= ['EquipoOrigen','LocalidadOrigen','Vendedor']


class InterfacesViewSet(viewsets.ModelViewSet):

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

我的excel课下载

class MyExampleViewSet(XLSXFileMixin, ReadOnlyModelViewSet):
    queryset = Interfaces.objects.all()
    serializer_class = InterfaceSerializer
    renderer_classes = (XLSXRenderer,)
    filter_class=InterfacesFilter
    filename = 'my_export.xlsx'

更新

要知道如何解决我的问题并使用 DRF 生成 EXCEL,我建议通过以下 URL:

如何从 Django Rest Framwrek 中的 URL 捕获参数以在视图中处理它 [已解决] in-django-rest-framwrek-to-process-it-in-a

4

1 回答 1

0

您可以使用 panda 库简单地读取 xls 文件。

首先,您在序列化程序类中收到您的文件:

myXlsFile = validated_data['myxlsFile']

然后像这样阅读:

import pandas as pd
df = pd.read_excel('myxlsFile', sheet_name='Sheet1')
于 2019-08-03T08:34:40.957 回答