Select 在 django-import-export 中导出哪些字段
Select which fields to export in django-import-export
我正在将 django-import-export 添加到我的应用程序中的管理员。
我想做的一件事是提供在管理页面中选择要导出哪些字段的可能性。
我搜索了这个主题,但只遇到两个没有答案的问题。
是否可以增加动态选择从管理页面导出哪些字段的可能性?
谢谢。
是的,这是可以实现的,但有点棘手。看看 example application,先让它工作。
- 看看
BookAdmin
实现。
- 创建
ExportForm
的子类,它实现了一个可以读取要导出的字段列表的表单小部件。
- 添加一个
BookResource
构造函数,它可以将 form_fields
作为 kwarg,并将其保存为实例变量。
- 在
BookAdmin
中,将 get_export_resource_kwargs()
方法覆盖到 return 表单中的字段列表。
- 将
BookResource
的 get_export_fields()
覆盖为 return 从您的表单中提取的字段列表。
- 最后,您必须覆盖
export_action()
so that it creates an instance of your custom form. (You actually only need to override the line which instantiates the form - 应该有一个 get_export_form()
方法,这样就不需要覆盖整个方法。欢迎提交 PR。)
在移植到您自己的应用程序之前使用示例应用程序进行尝试。
示例:
(基于admin.py
)
class BookResource(ModelResource):
class Meta:
model = Book
def __init__(self, form_fields=None):
super().__init__()
self.form_fields = form_fields
def get_export_fields(self):
return [self.fields[f] for f in self.form_fields]
class BookExportForm(ExportForm):
pass
# Add your logic to read fields from the form
class BookAdmin(ImportExportMixin, admin.ModelAdmin):
list_display = ('name', 'author', 'added')
list_filter = ['categories', 'author']
resource_class = BookResource
def get_export_resource_kwargs(self, request, *args, **kwargs):
formats = self.get_export_formats()
form = BookExportForm(formats, request.POST or None)
# get list of fields from form (hard-coded to 'author' for example purposes)
form_fields = ("author",)
return {"form_fields": form_fields}
我正在将 django-import-export 添加到我的应用程序中的管理员。
我想做的一件事是提供在管理页面中选择要导出哪些字段的可能性。
我搜索了这个主题,但只遇到两个没有答案的问题。
是否可以增加动态选择从管理页面导出哪些字段的可能性?
谢谢。
是的,这是可以实现的,但有点棘手。看看 example application,先让它工作。
- 看看
BookAdmin
实现。 - 创建
ExportForm
的子类,它实现了一个可以读取要导出的字段列表的表单小部件。 - 添加一个
BookResource
构造函数,它可以将form_fields
作为 kwarg,并将其保存为实例变量。 - 在
BookAdmin
中,将get_export_resource_kwargs()
方法覆盖到 return 表单中的字段列表。 - 将
BookResource
的get_export_fields()
覆盖为 return 从您的表单中提取的字段列表。 - 最后,您必须覆盖
export_action()
so that it creates an instance of your custom form. (You actually only need to override the line which instantiates the form - 应该有一个get_export_form()
方法,这样就不需要覆盖整个方法。欢迎提交 PR。)
在移植到您自己的应用程序之前使用示例应用程序进行尝试。
示例:
(基于admin.py
)
class BookResource(ModelResource):
class Meta:
model = Book
def __init__(self, form_fields=None):
super().__init__()
self.form_fields = form_fields
def get_export_fields(self):
return [self.fields[f] for f in self.form_fields]
class BookExportForm(ExportForm):
pass
# Add your logic to read fields from the form
class BookAdmin(ImportExportMixin, admin.ModelAdmin):
list_display = ('name', 'author', 'added')
list_filter = ['categories', 'author']
resource_class = BookResource
def get_export_resource_kwargs(self, request, *args, **kwargs):
formats = self.get_export_formats()
form = BookExportForm(formats, request.POST or None)
# get list of fields from form (hard-coded to 'author' for example purposes)
form_fields = ("author",)
return {"form_fields": form_fields}