Djangoでmigrationを実行するには、
1.Models.pyにテーブル名とカラムを記載
2.migrationファイルの作成
3.マイグレーションで実行されるSQL確認
4.マイグレーションの実行
その為、まずUIを元にデータ型を整理します。
UI
データ型
データ型を元にmodels.pyを書いていきます。
/sales/models.py
from django.db import models class Master(models.Model): name = models.CharField(max_length=255) office = models.CharField(max_length=255, null=True) zipcode = models.CharField(max_length=8) prefecture = models.CharField(max_length=20) address = models.CharField(max_length=255) tel = models.CharField(max_length=15) fax = models.CharField(max_length=15, null=True) mail = models.EmailField(max_length=255) name_top = models.CharField(max_length=255) position_top = models.CharField(max_length=100, null=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return self.name
– max_lengthは基本はvarchar(255)とします
– 郵便番号、TEL、FAXはハイフンなしであればIntegerですが、ハイフンありで入力する場合もあるのでCharFieldにしておきます
– null可のカラムは null=Trueと書いておきます
– __str__の使い方がよくわからないので、とりあえずreturn self.nameとしておきます。
$ python manage.py makemigrations sales
/sales/migrations/0001_initial.py
from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='Master', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255)), ('office', models.CharField(max_length=255, null=True)), ('zipcode', models.CharField(max_length=8)), ('prefecture', models.CharField(max_length=20)), ('address', models.CharField(max_length=255)), ('tel', models.CharField(max_length=15)), ('fax', models.CharField(max_length=15, null=True)), ('mail', models.EmailField(max_length=255)), ('name_top', models.CharField(max_length=255)), ('position_top', models.CharField(max_length=100, null=True)), ('created_at', models.DateField(auto_now_add=True)), ('updated_at', models.DateField(auto_now=True)), ], ), ]
$ python manage.py migrate
mysql> show tables;
+—————————-+
| Tables_in_hanbai |
+—————————-+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| sales_master |
+—————————-+
11 rows in set (0.00 sec)
mysql> describe sales_master;
+————–+————–+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————–+————–+——+—–+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| office | varchar(255) | YES | | NULL | |
| zipcode | varchar(8) | NO | | NULL | |
| prefecture | varchar(20) | NO | | NULL | |
| address | varchar(255) | NO | | NULL | |
| tel | varchar(15) | NO | | NULL | |
| fax | varchar(15) | YES | | NULL | |
| mail | varchar(255) | NO | | NULL | |
| name_top | varchar(255) | NO | | NULL | |
| position_top | varchar(100) | YES | | NULL | |
| created_at | datetime(6) | NO | | NULL | |
| updated_at | datetime(6) | NO | | NULL | |
+————–+————–+——+—–+———+—————-+
13 rows in set (0.00 sec)
tableの作成方法まできました。
table nameはアプリケーション名が先頭に付くので、sales_masterになっていることがわかります。ER図のtable名も直しておきます。
続いて、手動でデータをinsertして、表示するところまで行きたい。