使用django-admin 中的django 将用户数据导出为CSV

Fra*_*ito 2 python csv django django-models django-admin

我需要导出到我的数据库的 csv 用户,所以我或多或少地清楚(https://docs.djangoproject.com/en/dev/howto/outputting-csv/),但我需要的是选择哪个字段是以前导出的。

是否有可能使用该模型表明您可以选择将导出哪些字段?

小智 5

您的问题的最佳解决方案是在您的用户管理员中创建一个操作。这是如何做到的:转到您的 admin.py 并执行此操作

from django.contrib.auth import get_user_model
from django.http import HttpResponse
import csv, datetime

User = get_user_model()

def export_to_csv(modeladmin, request, queryset):
    opts = modeladmin.model._meta
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment;' 'filename{}.csv'.format(opts.verbose_name)
    writer = csv.writer(response)
    fields = [field for field in opts.get_fields() if not field.many_to_many and not field.one_to_many]
    # Write a first row with header information
    writer.writerow([field.verbose_name for field in fields])
    # Write data rows
    for obj in queryset:
        data_row = []
        for field in fields:
            value = getattr(obj, field.name)
            if isinstance(value, datetime.datetime):
                value = value.strftime('%d/%m/%Y')
            data_row.append(value)
        writer.writerow(data_row)

    return response

export_to_csv.short_description = 'Export to CSV'  #short description

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    '''
    '''
    actions = [export_to_csv]  #register the action in your model admin
Run Code Online (Sandbox Code Playgroud)

有了这个,您将能够选择要导出其数据的特定用户并立即将其导出。

  • 很好的答案!只是一个小修正,在响应['Content-Disposition']上缺少'='字符,它应该是:'filename={}.csv' (2认同)