我需要导出到我的数据库的 csv 用户,所以我或多或少地清楚(https://docs.djangoproject.com/en/dev/howto/outputting-csv/),但我需要选择哪个字段是以前导出的。
是否可以使用模型显示您可以选择要导出的字段?
我需要导出到我的数据库的 csv 用户,所以我或多或少地清楚(https://docs.djangoproject.com/en/dev/howto/outputting-csv/),但我需要选择哪个字段是以前导出的。
是否可以使用模型显示您可以选择要导出的字段?
您的问题的最佳解决方案是在您的用户管理员中创建一个操作。操作方法如下:转到您的 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):
'''
Registers the action in your model admin
'''
actions = [export_to_csv]
有了这个,您将能够选择要导出其数据并立即导出的特定用户。
从控制台,您可以简单地尝试
>>> from django.contrib.auth.models import User
>>> with open('myfile.csv', 'w') as csv:
... for user in User.objects.all():
... d = '%s, %s, %s,\n' % (user.username, user.last_name, user.first_name)
... csv.write(d)
where 设置d
为您要保存的任何字段。
当然,如果您想多次执行此操作,这将是一件痛苦的事情 - 创建自定义管理命令可能是一个更好的主意。
从 Django 3.2 开始,您还必须export_as_csv
通过添加装饰器来注册为“动作”。有关官方文档,请参阅此链接。