首页 > 解决方案 > Django 使用 CBV 将数据导出到 csv 文件

问题描述

我正在寻找export data从数据库到不同文件格式(.csv、.json、.xls ...)的文件。

这个想法应该是:用户转到一个新模板并可以访问许多下载按钮。当它点击一个时,他会下载所选格式的文件。

我有这样的看法:

class Exports(ListView):
    template_name = 'exports.html'
    context_object_name = 'exports'

    def export_categories_csv(request):
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename="categories.csv"'

        writer = csv.writer(response)
        writer.writerow(['id', 'name'])

        categories = Category.objects.all().values_list('id', 'name')
        for category in categories:
            writer.writerow(category)

        return response

    def get_context_data(self, **kwargs):
        self.export_categories_csv()
        return super(HomeView, self).get_context_data(**kwargs)

我的 urls.py 文件如下所示:

url(r'^exports$', Exports.as_view(), name='exports'),

以及相关的模板:

{% load staticfiles %}
{% load i18n %}

{% block main %}

    <a href="{% url 'exports' %}" class="btn btn-default">Export all categories in CSV</a>

{% endblock main %}

如何创建不同的按钮并在同一页面中显示这些按钮?以及如何在同一类中的每个按钮和每个函数之间建立链接。

到目前为止,问题是:

导出缺少查询集。定义 Exports.model、Exports.queryset 或覆盖 Exports.get_queryset()。

标签: djangoexport-to-csv

解决方案


推荐阅读