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

问题描述

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

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

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

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

谢谢。


解决方案

是的,这是可以实现的,但有点棘手。查看example application,并首先使其正常工作。

  1. 查看BookAdmin实现。
  2. 创建ExportForm的子类,该子类实现可以读取要导出的字段列表的表单构件。
  3. 添加可以接受form_fields作为kwarg的BookResource构造函数,并将其另存为实例变量。
  4. BookAdmin中,重写get_export_resource_kwargs()方法以从表单返回字段列表。
  5. 覆盖BookResourceget_export_fields()以返回从表单提取的字段列表。
  6. 最后,您必须覆盖export_action(),以便它创建自定义表单的实例。(您实际上只需要覆盖line which instantiates the form-为此应该有一个get_export_form()方法,这样就不需要覆盖整个方法。请随时提交公关。)

在移植到您自己的应用程序之前,使用示例应用程序试用此功能。

示例:

(基于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}

相关文章