如何根据用户组动态更改Django导入导出管理中的资源类?

问题描述 投票:0回答:1

我正在使用 Django Import-Export 库来管理 Django 管理界面中的导出功能。我有一个要求,需要根据用户的组成员身份动态更改资源类。

这是我想要实现的目标的简化版本:

    from import_export.admin import ImportExportModelAdmin
    from django.contrib import admin
    from .resources import RawFileDMDResource, RawFileResource
    
    class RawFileAdmin(ImportExportModelAdmin):
        resource_class = RawFileResource
        [...]
        def get_resource_class(self, request=None):
            resource_class = self.resource_class
            if request is None:
                user = get_user()
            else:
                user = request.user
    
            if user.groups.filter(name='DMD ext_users').exists():
                resource_class = RawFileDMDResource
            return resource_class

但是,get_resource_class 方法需要一个请求参数。看来 Import-Export 库没有在此方法的上下文中提供请求对象。

有没有一种方法可以在 get_resource_class 方法内访问当前用户的信息或请求对象,而无需显式传递请求对象?

django django-admin django-import-export django-admin-tools
1个回答
0
投票

不幸的是,使用当前的代码库做到这一点并不容易。

一种选择是重写整个

export_action()
方法,以便您可以添加代码以根据
request
实例进行选择。

例如,您可以将请求传递到

get_export_resource_classes()

然后您可以覆盖

get_export_resource_classes()
并在其中添加您的选择逻辑。

如果将其传递到方法中,根据请求属性返回资源类会容易得多。我已经提出了一个问题以实现此目的。如果您使用此方法,请随时提交 PR。

© www.soinside.com 2019 - 2024. All rights reserved.