django-import-export를 사용하여 django에 csv 데이터 추가

소개



이 기사에서는 django-import-export의 라이브러리를 사용하여 자작으로 만든 csv 파일을 django에 읽는 기사입니다. django-import-export는 관리 화면에서 csv 파일을 import하거나 export 할 수있는 라이브러리입니다. 이를 사용하여 이번에는 Book, Publisher 등의 모델을 작성하고, 이와 관련된 (일대일이나 일체 다) csv 파일을 읽어내는 것까지를 합니다. 게다가, 사용해 본 소감을 기술해 가고 싶습니다.

공식 사이트 : django-import-export

대상자



· 직접 만든 CSV 파일의 데이터를 장고 모델에 저장하고 싶은 사람
· django-import-export를 사용하여 보려고 생각했지만 작동하지 않는 사람
· 데이터베이스의 일대일과 다 대일의 내용에 대해 아는 사람

환경



다음 패키지를 설치하십시오.
pip install django django-import-export

목차


  • 프로젝트 만들기
  • 앱 만들기
  • csv 파일 만들기
  • import 해 본다

  • 프로젝트 만들기



    기본 구성


    django-admin startproject config .
    python manage.py startapp Book
    

    위의 명령을 사용하여 프로젝트와 모델을 만들 수 있으므로 settings.py에서 추가 앱과 모듈을 작성합니다.
    # config/settings.py
    
    INSTALLED_APPS = [
        "import_export",#django-import-exportを使うのに必要
        "Book",#今回作成したapp
    ]
    



    이번에는 모델을 3개 작성합니다. 방금 만든 Book의 models 안에 다음과 같이 기술합니다.
    #Book/models.py
    from django.db import models
    class Publisher(models.Model):
        name = models.CharField("出版社名",max_length=100,help_text="出版社")
    
    class Book(models.Model):
        title = models.CharField("タイトル",max_length=100,help_text="本のタイトル")
        publisher = models.ForeignKey(Publisher,on_delete=models.CASCADE)
    
    class BookPrice(models.Model):
        book = models.OneToOneField(Book,on_delete=models.CASCADE)
        price = models.IntegerField("定価",help_text="本の定価")
    

    모델의 내용은 다음과 같습니다.
    ・Book은 Publisher와 일체 다의 관계
    · BookPrice와 Book은 일대일 관계

    django-import-export의 차례



    이러한 모델이 csv 파일을 가져 오려면 관리 화면에서 설정하십시오. 여기서 등장하는 것이 django-import-export입니다. 구체적인 방법은 admin을 조금 만지는 것만으로 완료입니다.
    #Book/admin.py
    from django.contrib import admin
    from import_export import resources
    from import_export.admin import ImportMixin
    from .models import Book,BookPrice,Publisher
    
    class PublisherAdmin(ImportMixin,admin.ModelAdmin):
        class PublisherResource(resources.ModelResource):
            class Meta:
                model = Publisher
                fields = ("id","name",)
        resource_class = PublisherResource
    
    class BookAdmin(ImportMixin,admin.ModelAdmin):
        class BookResource(resources.ModelResource):
            class Meta:
                model = Book
                fields = ("id","title","publisher",)
        resource_class = BookResource
    
    
    class BookPriceAdmin(ImportMixin,admin.ModelAdmin):
        class BookPriceResource(resources.ModelResource):
            class Meta:
                model = BookPrice
                fields = ("id","book","price",)
        resource_class = BookPriceResource
    
    
    
    admin.site.register(Publisher,PublisherAdmin)
    admin.site.register(Book,BookAdmin)
    admin.site.register(BookPrice,BookPriceAdmin)
    

    **Resource로 import하는 csv 파일의 상세를 설정합니다. fields는 읽을 열을 설명합니다. fields 이외에도 import_id_fields등이 있어, id의 지정을 명시적으로 실시할 수도 있습니다. 그 외에도 csv만의 format을 받아들이는 것이나, 데이터에 변경이 있었을 경우도 import를 할지 어떨지를 변경할 수도 있습니다.

    csv 파일 만들기



    여기에서 Excel에서 세 개의 csv 파일을 만듭니다. 아래와 같이 다른 모델을 가리키는 경우는 연계하는 id 번호를 쓰는 것으로, 연계시키는 것이 가능해집니다. 예를 들어, 책의 '너의 목소리'와 '너의 소리'는 출판사 나카가와 문고의 객체를 보여줍니다. BookPrice의 Book은 일대일 관계이므로 BookPrice와 book의 ID 번호는 동일합니다.

    모델: Publisher





    모델: Book





    모델: BookPrice





    가져오기


    python manage.py createsuperuser #色々聞かれるけど書かれている通りぽちぽちする
    python manage.py runserver
    

    django의 관리 화면에 가면 방금 작성한 3 개의 모델이 관리 화면에 찍혀 있다고 생각합니다. 이 중 Publisher를 클릭하면 다음과 같은 화면이 표시됩니다.

    이 화면의 오른쪽 상단에 IMPORT라고 표시되어 있으므로 여기에서 import합니다. 그러면 직접 작성한 모델이 등록됩니다. 모델과의 연계도 되어 있으므로 확인해 보세요.

    끝에



    이 기사에서는 django-import-export를 사용하여 데이터를 django 모델에 등록하기로했습니다. 보다 구체적으로, 우리는 세 가지 모델을 만들었고 각각이 다른 모델과 관련된 관계에 있지만 id를 지정하여 데이터의 관계를 유지한다는 것을 보여주었습니다.
    다음에 기회가 있으면 다대다의 모델의 작성도 해 보고 싶습니다.

    좋은 웹페이지 즐겨찾기