Как динамически изменять класс ресурса в админке 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, если вы используете этот подход.