Django: csvをjsonにする fixtures編

「Django fixtures, Powershell(2行のコードで変換), Notepad++」で、生徒一覧の初期データを読み込む

models.py作成

from django.db import models

class Students(models.Model):
    id = models.AutoField(primary_key=True)
    student_name = models.CharField(max_length=50, null=True, blank=True)
    gender = models.IntegerField(choices=GENDER_CHOICES)
    course_name = models.ForeignKey(Courses, on_delete=models.PROTECT, default=1)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    dob = models.DateField(max_length=8, null=True, blank=True)
   
    def __str__(self):
        return f"{self.id} | {self.student_name} | {self.gender} | {self.course_name}| {self.created_at} | {self.updated_at} | {self.dob} "

アプリフォルダ内に、「fixtures」フォルダ

●この中に読ませたいデータを放り込む

「fixtures」内に「students.json」作成

●名前は任意

●fixturesのフォーマットに従う ↓↓↓

●ダミーの データを入力してみる

[
    {
      "model": "students.students",
      "pk": 1,
      "fields": {
        "student_name": "Miyabi Nakata",
        "gender": "2",
        "course_name": "1",
        "created_at": "2020-7-20",
        "updated_at": "2021-7-1",
        "dob": "2000-3-3"
      }
    },
    {
        "model": "students.students",
        "pk": 2,
        "fields": {
          "student_name": "Yushi Uno",
          "gender": "1",
          "course_name": "2",
          "created_at": "2020-8-20",
          "updated_at": "2021-8-1",
          "dob": "2000-8-3"
        }
      }    
  ]

python3 manage.py loaddata students.json実行

大量のデータ読み込みの場合:

読み込みたいテーブル(データ)のcsvファイル作成(models.pyのキーと同じ列名をつける)

(とりあえず4件で試す)データは全てダミーです。

上記3のため、csvファイルのA列にモデルを追加する

※ダミーデータ

データベースに取り込むために、csvをjsonに変換

動画の真似をして、windows powershellを試してみる

●たった2行のコードで、達成

●Powershellを開いたら、まず、csvフォルダに移動してから、以下の2行を入力するだけ

PS C:\Users\t_yam\Downloads\LJ> $var = import-csv .\Students.csv | ConvertTo-Json
PS C:\Users\t_yam\Downloads\LJ> $var | Add-Content -Path "students.json"

●あっという間に json ファイルができたので、「Notepad++」で開く

●replace を使って、fixtures のフォーマットにそろえる

●閉じカッコも、一気に変換

VSC拡張機能のsqliteで、現在のデータベースの中身をみてみる

現在は2件のデータが登録されています(さっきのやつです)

本番では、jsonファイルごと差し替えますが、今回は、新たに4件を追加してみます。

既存のstudents.json (赤)に、Notepad++ で作成した jsonデータ(青)をコピペで追加

python3 manage.py loaddata students.json 再度実行

無事に4件追加されました!!

一覧表(html)で読み込ませる

{% extends "students/base.html" %}

{% block title %} Students {% endblock %}
{% block body %}
<div class="container">
    <h2 style="text-align: center;">Student List</h2>
         <table border="1">
        <tr style="text-align: center;">
            <th>id</th>
            <th>name</th>
            <th>1:M 2:F</th>
            <th>course</th>
            <th>Registered</th>
            <th>Updated</th>
            <th>BD</th>
        </tr>
        {% for student in object_list %}
        <tr>
            <td>{{ student.id }}</td>
            <td>{{ student.student_name }}</td>
            <td>{{ student.gender }}</td>
            <td>{{ student.course_name }}</td>
            <td>{{ student.created_at }}</td>
            <td>{{ student.updated_at }}</td>
            <td>{{ student.dob }}</td>
            <th><a href="#">detail</a></th>
        </tr>
        {% endfor %}
    </table>
</div>
{% endblock %}

公式サイトドキュメンテーション

こちらの動画を参考にしています

こちらのブログを参考にしています

こちらのブログも助かりました

まとめ

Djangoアプリ作成中に、まさかのPowershell登場で、驚きましたが、なかなか便利なので、気に入りました! csvにコース名を入力すると、「数字じゃないとだめ!」と怒られたので、泣く泣く数字に。。。コース名を表示する方法を調べてみます。

おすすめ記事