在 django-import-export 中选择要导出的字段 示例:

问题描述

我正在将 django-import-export 添加到我的应用程序中的管理员

我想做的一件事是提供在管理页面中选择要导出的字段的可能性。

搜索了这个主题,但只遇到了两个没有答案的问题。

是否可以添加动态选择从管理页面导出哪些字段的可能性?

谢谢。

解决方法

是的,这是可以实现的,但有点棘手。看看 example application,然后先让它工作。

  1. 看看 BookAdmin 的实现。
  2. 创建一个 ExportForm 的子类,它实现了一个可以读取要导出的字段列表的表单小部件。
  3. 添加一个 BookResource 构造函数,它可以将 form_fields 作为 kwarg,并将其保存为实例变量。
  4. BookAdmin 中,重写 get_export_resource_kwargs() 方法以从表单返回字段列表。
  5. 覆盖 BookResourceget_export_fields() 以返回从表单中提取的字段列表。
  6. 最后,您必须覆盖 export_action() 以创建自定义表单的实例。 (您实际上只需要覆盖 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}