Django-Import-Export назначение поля определенному столбцу

У меня есть рабочая форма, которая экспортирует все данные в xls, используя Resource и Fields из пакета django-import-export. Но теперь мне нужно пойти немного дальше и сделать ее более продвинутой. Мне нужно экспортировать все данные в существующий шаблон Excel, назначив каждое поле определенному столбцу, как, например: Поле 1 должно быть заполнено в B3, поле 2 в C4 и т.д. и т.п.

Я думаю, что здесь можно использовать after_export(), но в документации нет подробного описания того, как использовать этот метод. Есть ли у кого-нибудь опыт работы с этим пакетом?

Я не использую интеграцию с администратором.

after_export() - это метод, который вы можете переопределить, чтобы изменить данные до их возвращения.

По умолчанию он ничего не делает. Однако он предоставляет объект data, который является экземпляром Dataset. Если вы обратитесь к свойству dict, то у вас будет список экземпляров OrderedDict, соответствующих каждой строке, которую возвращает ваш кверисет. Таким образом, вы можете построить совершенно новый Dataset (список dicts), соответствующий нужному вам формату.

Например, если вы хотите, чтобы первый столбец первой строки появился в ячейке B3, вы можете сделать это следующим образом:

    def after_export(self, queryset, data, *args, **kwargs):
        newdata = tablib.Dataset()
        cell1_val = data.dict[0].get("col1", "")
        for i, row in enumerate(data):
            if i == 1:
                newrow = list(row)
                # cell b3
                newrow[2] = cell1_val
                row = newrow
            newdata.append(row)
        data.dict = newdata.dict

Однако вы заметите, что такой подход не очень удобен для чтения и довольно громоздок. Поэтому если вам не нужны другие возможности django-import-export, то использование библиотеки типа openpyxl, вероятно, будет лучшим подходом.

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