我已经建立了一个从PostgreSQL数据库查询的Django应用。导出模型中的所有数据似乎相对简单,但是如果我只想导出返回的查询集中的数据,该怎么办。
目前,我正在通过在页面上有一个按钮并在用户希望导出数据时更改url来进行管理。我正在渲染的视图中的代码如下。
def export_data(request,pk):
resource_class = MDPResource()
queryset = MDP.objects.filter(mdp_id=pk)
dataset = person_resource.export(queryset)
response = HttpResponse(dataset.csv, content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="mdpbasic.csv"'
return response
但是,这意味着我将在用户最初打开页面时进行一次查询,然后在用户希望导出我已经在其中查询过的数据时进行第二次查询(实际上是额外的2次)。前一个视图。
此外,在页面的一部分中,我还将Q模型用于复杂过滤。在这种情况下,上面的方法不足以导出数据(我不想重建查询)。
我也不想将数据写到文件中(如果我可以帮助的话),因为那样一来,一旦用户导出了数据,就会出现必须使用os删除它的问题。
Generating CSV file with Django (dynamic content)
我已经检查了这个问题,但是我不确定将字典传递给urlpattern的方式如何,并且看起来查询仍然要多进行一次(比我当前的方法少一遍)。 / p>
我不知道我是否应该为此特定目的签出应用程序。我研究了django-queryset-csv和django-import-export等夫妇,但它们似乎都没有达到我提到的目的。
django: export current queryset to csv by button click in browser
我已经看到了这个使用基于类的视图的示例,但是我想看看是否有一种方法可以使用基于函数的视图,因此我不必将所有视图都迁移到基于类的视图一个。