0
点赞
收藏
分享

微信扫一扫

Django Admin 后台增加 导出数据到 CSV

诗与泡面 2021-09-22 阅读 68
日记本
STEP 1:
#选择需要从Model中导出的字段(自定义)
exportable_fields = ('username', 'city', 'phone', 'bachelor_school', 'master_school', 'degree', 'first_result', 'first_interviewer_user',
                     'second_result', 'second_interviewer_user', 'hr_result', 'hr_score', 'hr_remark', 'hr_interviewer_user')
STEP 2:
# define export action
def export_model_as_csv(modeladmin, request, queryset):
    #指定响应的文本类型[指定编码方式,防止导出csv文件乱码]
    response = HttpResponse(content_type='text/csv',charset = 'utf-8-sig' ,)
    #对应前面定义的字段名筛选
    field_list = exportable_fields
    #指定输出文件名
    response['Content-Disposition'] = 'attachment; filename=%s-list-%s.csv' % (
        'recruitment-candidates',
        datetime.now().strftime('%Y-%m-%d-%H-%M-%S'),
    )

    # 写入表头
    writer = csv.writer(response)
    writer.writerow(
        [queryset.model._meta.get_field(f).verbose_name.title() for f in field_list],
    )

    for obj in queryset:
        ## 单行 的记录(各个字段的值), 根据字段对象,从当前实例 (obj) 中获取字段值
        csv_line_values = []
        for field in field_list:
            field_object = queryset.model._meta.get_field(field)
            field_value = field_object.value_from_object(obj)
            csv_line_values.append(field_value)
        writer.writerow(csv_line_values)
    
    return response

#该动作在admin中的显示文字(中文样式)
export_model_as_csv.short_description = u'导出为CSV文件'
STEP 3:
# 后台管理类
class xxxAdmin(admin.ModelAdmin):
    # 增加动作, 对应相应的方法名
    actions = (export_model_as_csv, )
举报

相关推荐

0 条评论