alc*_*der 3 python django django-admin
我想从 django admin 下载数据作为 .csv 文件。我遵循教程https://www.endpoint.com/blog/2012/02/22/dowloading-csv-file-with-from-django。
我没有看到下载 csv 选项。我该如何解决我的问题?
我正在使用Python3,创建了迁移。
这是我的代码
模型.py
from django.db import models
from django.contrib import admin
class Stat(models.Model):
code = models.CharField(max_length=100)
country = models.CharField(max_length=100)
ip = models.CharField(max_length=100)
url = models.CharField(max_length=100)
count = models.IntegerField()
class StatAdmin(admin.ModelAdmin):
list_display = ('code', 'country', 'ip', 'url', 'count')
def download_csv(self, request, queryset):
import csv
f = open('some.csv', 'wb')
writer = csv.writer(f)
writer.writerow(["code", "country", "ip", "url", "count"])
for s in queryset:
writer.writerow([s.code, s.country, s.ip, s.url, s.count])
admin.site.register(Stat, StatAdmin)
Run Code Online (Sandbox Code Playgroud)
如果你想在本地保存文件,@Ben 的解决方案是有效的,而且还有一个小错误<如果我们要在那里写入一些字符串,我们应该将文件打开为“w”,而不是“wb”。
这个解决方案对我有用(您可以将其直接粘贴到您的 model.Admin 子类,admin 类中):
def export_as_csv(self, request, queryset):
meta = self.model._meta
field_names = [field.name for field in meta.fields]
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename={}.csv'.format(meta)
writer = csv.writer(response)
writer.writerow(field_names)
for obj in queryset:
row = writer.writerow([getattr(obj, field) for field in field_names])
return response
export_as_csv.short_description = "Export Selected"
Run Code Online (Sandbox Code Playgroud)
然后在 model.Admin 中:
actions = ("export_as_csv",)
Run Code Online (Sandbox Code Playgroud)
此外,还有一些库可以一键保存文件:例如django-import-export 。
您需要将其download_csv作为操作添加到StatAdmin班级中。
https://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#adding-actions-to-the-modeladmin
def download_csv(modeladmin, request, queryset):
import csv
f = open('some.csv', 'wb')
writer = csv.writer(f)
writer.writerow(["code", "country", "ip", "url", "count"])
for s in queryset:
writer.writerow([s.code, s.country, s.ip, s.url, s.count])
class StatAdmin(admin.ModelAdmin):
list_display = ('code', 'country', 'ip', 'url', 'count')
actions = [download_csv]
Run Code Online (Sandbox Code Playgroud)