Select 在 django-import-export 中导出哪些字段

Select which fields to export in django-import-export

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

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

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

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

谢谢。

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

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