简体   繁体   English

下载生成的文件 DRF

[英]Download generated file DRF

I'm using django-filter for filtering data.我正在使用 django-filter 过滤数据。 And after filtering I want to download data in xls.过滤后我想下载 xls 中的数据。 Please, tell me how I can do this请告诉我我该怎么做

views.py视图.py

class ProductsReport(generics.ListAPIView):
    permission_classes = GLOBAL_PERMISSIONS
    serializer_class = serializers.ProductReportSerializer
    queryset = models.SchichtNomenclature.objects.all()
    filter_backends = DEFAULT_FILTERS
    filter_class = ProductsReportFilter
    ordering = ["-schicht__updated"]

You can write a viewset as follows,您可以按如下方式编写视图集,

class UsersViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):

    permission_classes = GLOBAL_PERMISSIONS
    serializer_class = UserSerializer
    queryset = Users.objects.all()
    filter_class = UsersFilter
    ordering = ["-schicht__updated"]

    @action(url_path='sample_csv_template', methods=['get'], detail=False)
    def sample_csv_template(self, request, pk=None):

        # data_frame = list()
        # filtered_queryset = self.filter_queryset(self.queryset)
        # for item in filtered_queryset:
        #     data_frame.append(dict(self.serializer_class(item)).data)

        USERS_COLUMNS = ['First Name', 'Last Name', 'Email']
        users_data_frame = [{'First Name': 'Aaron', 'Last Name': 'Spike', 'Email': 'aaraon@test.com'}]
        data_frame = pandas.DataFrame(users_data_frame, columns=USERS_COLUMNS)
        excel_file = IO()

        writer = pandas.ExcelWriter(excel_file, engine='xlsxwriter')
        data_frame.to_excel(writer, sheet_name="users_data", index=False)
        writer.save()
        writer.close()

        excel_file.seek(0)
        response = HttpResponse(excel_file.read(), content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        response['Content-Disposition'] = 'attachment; filename=test.xlsx'
        return response

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM