Django-发布主键列表并使用其值导出多个CSV文件

问题描述

我有一个TableView,用户可以在其中选择表中1到X的行数。

我使用一些jquery来收集所选行的主键并将其发送 值以POST形式返回到视图。 我想将这些PK导出到单独的csv文件中-每个PK的工作流程需要一个CSV。 我将CSV导出与单个PK一起使用到CSV,但是导出了PK列表以单独的CSV 不起作用,什么也没导出。

我正在使用django-import-export包来自定义csv的格式。 有大量的字段导出,所以我将尝试仅发布相关代码 从视图中。

从自己的网址路径调用代码时,该代码适用于单个CSV导出:

def export_csv(request,pk):
    slatedoc_resource = SlateDocResource()
    queryset = SlateDoc.objects.filter(pk=pk)
    dataset = slatedoc_resource.export(queryset)
    item = SlateDoc.objects.get(pk=pk)
    filename = f"{item.int_house_num}.csv"

    response = HttpResponse(dataset.csv,content_type='text/csv')
    response['Content-disposition'] = f'attachment; filename={filename}'

    return response

当我从TableView发布PK列表时,post()方法将遍历PK 并将每个发送给上面显示export_csv()函数。但不会导出任何CSV文件。 如果有人看到我出了问题,我将非常感谢您的帮助。

def post(self,request,*args,**kwargs):
    if request.method == 'POST':
        pks = self.request.POST.get('pks') #pks passed as a string (14,11,16,12,19)
        pkList = pks.split(",")  #string split to create a list ['14','11','16','12','19']
        try:
            for pk in pkList:
                request = HttpRequest()
                request.method = "GET"
                request.path = f"/slatedoc/{pk}/csv/"
                request.resolver = f"ResolverMatch(\
                    func=slatedoc.views.export_csv,\
                    args=(),\
                    kwargs={'pk':{pk}},\
                    url_name=export-csv,\
                    app_names=[],\
                    namespaces=[],\
                    route=slatedoc/<int: {pk} > /csv/ \
                    )"
                export_csv(request,pk) #sends HttpRequest() and pk to export_csv 
        except ValueError as e:
            return JsonResponse(status=400)
        return JsonResponse({"status": "ok"},status=204)
     

我可以确认PK已达到post()函数

print(pks) = 14,19,17,18,20,15,21

我可以确认请求和pk已发送到export_csv()

post()发送到export_csv()的请求

ResolverMatch( func=slatedoc.views.export_csv,args=(),kwargs=pk,url_name=export-csv,app_names=[],namespaces=[],route=slatedoc/<int: 14 > /csv/                        
               )

export_csv()收到的请求

method : GET           
path: /slatedoc/14/csv/           
pathInfo:           
method: GET          
resolver: None          
content type: None          
params: None          
PK: 14

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)