Как динамически изменять класс ресурса в админке Django Import-Export на основе группы пользователей?

Я использую библиотеку 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() и добавить туда свою логику выбора.

Было бы гораздо проще возвращать класс Resource на основе свойств запроса, если бы это передавалось в метод. Я поднял вопрос для реализации этого. Не стесняйтесь подавать PR, если вы используете этот подход.

Вернуться на верх