我正在使用 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 方法内访问当前用户的信息或请求对象,而无需显式传递请求对象?
不幸的是,使用当前的代码库做到这一点并不容易。
一种选择是重写整个
export_action()
方法,以便您可以添加代码以根据 request
实例进行选择。
get_export_resource_classes()
。
然后您可以覆盖
get_export_resource_classes()
并在其中添加您的选择逻辑。
如果将其传递到方法中,根据请求属性返回资源类会容易得多。我已经提出了一个问题以实现此目的。如果您使用此方法,请随时提交 PR。