为ModelAdmin定制,导出CSV插件
在utils文件夹中创建export_as_csv.py, 然后定义处理函数:
""" 导出QuerySet为CSV插件,为ModelAdmin定制. """ import csv import codecs from django.http import HttpResponse def exportcsv(modeladmin, request, queryset): res = HttpResponse(content_type='text/csv') res['Content-Disposition'] = 'attachment; filename="abc.csv"' res.write(codecs.BOM_UTF8) writer = csv.writer(res) writer.writerow(["title", "summary", "publisher", "href", "category", "recommend", "add_time"]) for obj in queryset: writer.writerow( [obj.title, obj.summary, obj.publisher, obj.href, obj.category, obj.recommend, obj.add_time]) return res exportcsv.short_description = "导出为CSV文件"
通用处理函数:

import datetime import csv import codecs from django.http import HttpResponse def export_as_csv(model_admin, request, queryset): """ :param model_admin: 要求model_admin中必须定义list_display字段 :param request: :param queryset: 为界面中选中的queryset obj集合 :return: s """ filename = queryset.model._meta.model_name + datetime.datetime.now().strftime("%Y%m%d%H%M%S") res = HttpResponse(content_type="text/csv") res["Content-Disposition"] = "attachment; filename={filename}.csv".format(filename=filename) res.write(codecs.BOM_UTF8) writer = csv.writer(res) writer.writerow(model_admin.list_display) for obj in queryset: writer.writerow([getattr(obj, field) for field in model_admin.list_display]) return res export_as_csv.short_description = "导出为CSV文件"
admin.py
from django.contrib import admin from utils.export_as_csv import exportcsv class NewsAdmin(admin.ModelAdmin): list_display = ["title", "summary", "publisher", "href", "category", "recommend", "add_time"] actions = [exportcsv]
效果图: