Django Admin的表格导出和打印
要实现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'
相关文章