サーバーに保存してあるCSVファイルのデータを読み込み、Djangoでモデルに登録してみます。
Contents
モデルの作成
0 1 2 3 4 5 6 7 8 9 |
from django.db import models class Book(models.Model): book_code = models.CharField(max_length=255, unique=True) # 本のコード、ユニークな値 name = models.CharField(max_length=255) # def __str__(self): return self.name |
実験用にbook_codeとnameのカラムを持つ簡単なモデルを作成します。
viewの作成
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import csv from django.shortcuts import render from .models import Book def import_books_and_display(request): # CSVファイルのパス(任意) csv_file_path = 'path/to/your/books.csv' # CSVからデータを読み込み、Bookモデルにデータをインポート with open(csv_file_path, newline='', encoding='utf-8') as csvfile: reader = csv.reader(csvfile) next(reader) # ヘッダー行をスキップ books_imported = [] for row in reader: book, created = Book.objects.get_or_create( book_code=row[0], name=row[1] ) if created: books_imported.append(book) # books変数に全Bookオブジェクトを代入 books = Book.objects.all() # テンプレートと表示データの設定 return render(request, 'books/display_books.html', {'books': books, 'books_imported': books_imported}) |
まず、CSVファイルのパスを設定します。
CSVの操作には Pythonの「CSV」モジュールを使います。
CSVの一行目がタイトルである場合、二行目からがデータになります。よって一行目はインポートから除外します。これは下記のように記載すればOKです。
「next(reader)」
template
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Imported Books</title> </head> <body> <h1>Imported Books</h1> <h2>Newly Imported</h2> <ul> {% for book in books_imported %} <li>{{ book.book_code }} - {{ book.name }}</li> {% empty %} <li>No new books were imported.</li> {% endfor %} </ul> <h2>All Books</h2> <ul> {% for book in books %} <li>{{ book.book_code }} - {{ book.name }}</li> {% endfor %} </ul> </body> </html> |