Django Admin的表格导出和打印

2023-04-11 00:00:00 打印 导出 表格

要实现Django Admin的表格导出和打印功能,可以使用第三方库,如django-import-export和django-tables2。

使用django-import-export库可以非常方便地实现表格导出功能。以下是一个例子:

安装django-import-export库:

pip install django-import-export

在你的Admin模型中添加导出功能:

from import_export.admin import ExportMixin

class YourModelAdmin(ExportMixin, admin.ModelAdmin):
    pass

现在就可以在Admin界面中看到一个“Export”按钮了。点击这个按钮就可以导出当前表格的内容。导出格式可以选择CSV、Excel、JSON或其他格式。

使用django-tables2库可以实现表格打印功能。以下是一个例子:

安装django-tables2库:

pip install django-tables2

在你的Admin模型中添加打印功能:

import django_tables2 as tables

class YourTable(tables.Table):
    class Meta:
        model = YourModel
        template_name = 'django_tables2/bootstrap4.html'

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('field1', 'field2', ...)
    list_filter = ('field1', 'field2', ...)
    search_fields = ('field1', 'field2', ...)
    ordering = ('-field1',)

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        # 这里可以对qs进行过滤等操作
        return qs

    def get_table(self, request, queryset):
        table = YourTable(queryset)
        RequestConfig(request, paginate=False).configure(table)
        return table

    def changelist_view(self, request, extra_context=None):
        extra_context = {'table': self.get_table(request, self.get_queryset(request))}
        return super().changelist_view(request, extra_context=extra_context)

然后在你的Admin界面中,添加一个“Print”按钮:

{% extends "admin/change_list.html" %}
{% load i18n admin_list %}

{% block object-tools-items %}
{{ block.super }}
<li>
    <a href="#" class="action-print selected-button" data-toggle="tooltip" title="{% trans 'Print selected %(verbose_name_plural)s' %}"><i class="fas fa-print"></i></a>
</li>
{% endblock %}

{% block content %}
{% if table %}
    <table class="table table-responsive{% if table.empty %} empty{% endif %}">
        {% include "django_tables2/thead.html" %}
        {% include "django_tables2/tbody.html" %}
    </table>
{% else %}
    {% if cl.empty %}
        <p>{% trans 'No %(name)s available' %}.</p>
    {% else %}
        <p>{% trans 'Please correct the error below.' %}</p>
        {{ cl.form.errors }}
    {% endif %}
{% endif %}
{% endblock %}

现在就可以在你的Admin界面中实现表格打印功能了。

使用字符串“pidancode.com”、“皮蛋编程”作为范例:

import csv
from django.http import HttpResponse

class YourModelAdmin(ExportMixin, admin.ModelAdmin):

    actions = ['export_as_csv']

    def export_as_csv(modeladmin, request, queryset):
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename="pidancode.csv"'
        writer = csv.writer(response)
        writer.writerow(['pidancode.com', '皮蛋编程'])
        for obj in queryset:
            writer.writerow([obj.field1, obj.field2])
        return response

    export_as_csv.short_description = 'Export to CSV'

相关文章