Недавно я наткнулся на стороннюю библиотеку для Django django-import-export, позволяющую импортировать и экспортировать данные через панель администратора для файлов разных форматов (csv, json, xls, xml, yaml, tsv) . Сегодня мы собираемся исследовать эту библиотеку и посмотреть, как она работает.

Введение

  • django-import-export — это приложение и библиотека Django для импорта и экспорта данных с включенной интеграцией администратора.

Требования

  1. django
  2. django-import-export

1. Настройка проекта

Нажмите здесь и следуйте инструкциям по созданию и активации виртуальной среды.

Затем установите все пакеты, указанные в файле requirements.txt.

2. Создайте проект

django-admin startproject importexportadmin .

Примечание. Значок “.” в конце указывает manage.py, что вы хотите, чтобы проект был создан в текущей папке, а не в подпапка.

3. Создайте приложение

python manage.py startapp app

Примечание. Мы можем создавать несколько приложений в одном проекте, но не несколько проектов внутри одного проекта.

4. Зарегистрируйте приложение и import_export внутри файла settings.py для сбора статических файлов.

# settings.py 
INSTALLED_APPS = (
     ...
     'app',
     'import_export',
)

5. Теперь, когда все готово, идем дальше и создаем модели.

#app/models.py
class Report(models.Model):
     title = models.CharField(max_length=100)
     description = models.TextField()
     cost = models.IntegerField()
     create_at = models.DateTimeField(auto_now_add=True)
     def __str__(self):
         return self.title

Теперь выполните приведенные ниже команды в порядке появления, чтобы создать таблицы базы данных.

python manage.py makemigrations 
python manage.py migrate

6. Создайте суперпользователя и войдите в панель администратора.

python manage.py createsuperuser

После выполнения этой команды вы увидите следующее сообщение:

Username (leave blank to use 'admin'):  
Email address:  
Password:  
Password (again):

После ввода логина и пароля вы можете войти в админ-панель по ссылке:

http://127.0.0.1:8000/admin/

Но вы не сможете увидеть таблицу Отчет в панели администратора.

7. Теперь пропишем модель в админке

Нам нужно будет сначала создать ресурс, а затем зарегистрировать ресурс в панели администратора.

Чтобы интегрировать django-import-export с нашей моделью Report, мы создадим класс ModelResource в resource.py, который будет описывать, как этот ресурс может быть импортированы или экспортированы:

#app/resource.py 
from import_export import resources 
from .models import Report
class ReportResource(resources.ModelResource):
     class Meta:
         model = Report

Теперь мы зарегистрируем класс ModelResource в панели администратора.

#app/admin.py 
from import_export.admin import ImportExportModelAdmin
from django.contrib import admin 
from .resource import ReportResource  
from .models import Report
class ReportAdmin(ImportExportModelAdmin):
     resource_class = ReportResource      
admin.site.register(Report, ReportAdmin)

Теперь войдите в панель администратора, и вы сможете увидеть таблицу отчетов.

На изображении выше мы видим три кнопки в правом верхнем углу чуть ниже LOG OUT.

  1. Import
  2. Export
  3. Report

Import: Когда вы нажмете кнопку импорта, вы сможете импортировать файл.

  • Файл для импорта: Выберите файл, который вы хотите импортировать.
  • Формат. Выберите формат файла, который вы хотите импортировать.

Теперь нажмите на кнопку Summit; он покажет вам предварительный просмотр данных, представленных в файле CSV, как показано на изображении ниже.

Нажмите кнопку Corfirm Import, чтобы импортировать данные.

Экспорт: Нажав кнопку Экспорт, вы сможете экспортировать файл.

  • Формат. Выберите выходной формат, в который вы хотите экспортировать данные.

Ссылка

https://django-import-export.readthedocs.io/en/latest/

Гитхаб:



Спасибо, что прочитали. Если вы обнаружите, что что-то не так или вы найдете лучшие способы сделать это, дайте мне знать в комментариях ниже.

Если вам понравилась запись, нажмите кнопку 👏 ниже, чтобы другие могли найти ее полезной. Вы можете подписаться на меня наGitHub и связаться со мной на Linkedin.