Django基于类的CSV导出视图
项目描述
django-csv-export-view
Django的基于类的CSV导出视图。
功能
- 通过设置Django的
model
和fields
或exclude
可迭代对象轻松进行CSV导出。 - 与现有的基于类的视图混入一起工作以进行访问控制
- 默认生成对Microsoft Excel友好的CSV
- 为CSV设置了适当的HTTP头
- 根据需要轻松覆盖默认值
- 轻松集成到Django Admin中
安装
pip install django-csv-export-view
快速入门
示例
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = ("field", "related", "property")
# When using related fields you will likely want to override get_queryset() use select_related() or prefetch_related().
def get_queryset(self):
return super().get_queryset().select_related("related")
OR
return super().get_queryset().prefetch_related("related")
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = ("field", "related__field", "property")
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
exclude = ("id",)
def get_queryset(self):
queryset = super().get_queryset()
return queryset.exclude(deleted=True)
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
def get_fields(self, queryset):
fields = ["username", "email"]
if self.request.user.is_superuser:
fields.append("birth_date")
return fields
fields
/ exclude
:字段名和属性的迭代对象。您不能同时设置fields
和exclude
。当使用"__all__"
时,也可以设置fields
以导出所有字段。当使用"__all__"
时,不包括模型属性。可以使用__
使用相关字段。如果默认逻辑不支持自定义行为,则覆盖get_fields(self, queryset)
。
model
:用于CSV导出查询集的模型。如果需要自定义查询集,则覆盖get_queryset()
。
进一步定制
示例
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
header = False
specify_separator = False
filename = "data-export.csv"
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
verbose_names = False
from django.utils import timezone
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
def get_filename(self, queryset):
return "data-export-{!s}.csv".format(timezone.now())
header
- 布尔值 - 默认:True
是否在CSV中包含标题。
filename
- 字符串 - 默认值:从 queryset.model
的 verbose_name_plural
生成的划线版本。
如果需要动态文件名,则重写 get_filename(self, queryset)
。
specify_separator
- 布尔值 - 默认值:True
是否在CSV文件的第一行包含 sep=<sepaator>
。这对于生成兼容Microsoft Excel的CSV文件非常有用。
verbose_names
- 布尔值 - 默认值:True
是否在CSV文件标题中使用首字母大写的verbose列名。如果为False
,则使用字段名。
CSV写入器选项
示例
from csv_export.views import CSVExportView
from .models import MyModel
class DataExportView(CSVExportView):
model = MyModel
fields = "__all__"
def get_csv_writer_fmtparams(self):
fmtparams = super().get_csv_writer_fmtparams()
fmtparams["delimiter"] = "|"
return fmtparams
重写 get_csv_writer_fmtparams(self)
并返回一个csv写入格式参数的字典。默认格式参数为:dialect="excel" 和 quoting=csv.QUOTE_ALL。请参阅Python文档中所有可用选项
https://docs.pythonlang.cn/3.9/library/csv.html#csv.writer
Django管理后台集成
示例
from django.contrib import admin
from csv_export.views import CSVExportView
from .models import MyModel
@admin.register(MyModel)
class DataAdmin(admin.ModelAdmin):
actions = ("export_data_csv",)
def export_data_csv(self, request, queryset):
view = CSVExportView(queryset=queryset, fields="__all__")
return view.get(request)
export_data_csv.short_description = "Export CSV for selected Data records"
贡献
接受合并请求。
替代方案
https://github.com/django-import-export/django-import-export/
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
哈希值 for django_csv_export_view-2.0.0-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5bb4b9365ff2c195f70f7a8dbf64e65fac9349b0f6a0f0159df5c662b786f323 |
|
MD5 | 742be033d025a2c5029f1b70d6c1b92c |
|
BLAKE2b-256 | 2b386a1afe6a6101face7bbc9db882bfb2cdddb055aceb6f58062334b04559db |