【问题标题】:Select which fields to export in django-import-export在 django-import-export 中选择要导出的字段
【发布时间】:2021-08-11 12:48:24
【问题描述】:

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

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

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

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

谢谢。

【问题讨论】:

    标签: python django dynamic field django-import-export


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您的解释。我试了一下。现在我只需要在列标题中添加复选框并阅读已选中的内容,对吗?
    • 是的,使用复选框是一种方法
    猜你喜欢
    • 2015-05-08
    • 2013-11-13
    • 1970-01-01
    • 2021-06-11
    • 2020-11-18
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多