在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文件"
View Code
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]
效果图:
![]()