サーバーに保存してあるCSVファイルのデータを読み込み、Djangoでモデルに登録してみます。
モデルの作成
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の作成
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
<!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>