背景
Djangoで単一アプリの中に複数テーブルを持たせたかったのですが、2つ目以降のテーブルのマイグレーションに成功しても管理サイト上で表示がされなかったので、その問題を解消したかった。
問題
まずテーブルを2つ定義(練習なので2つのテーブルの中身は一緒です)。
models.py
# 1つ目のテーブル
class People(models.Model):
# 項目定義
Name = models.CharField(max_length=100) # 文字列
Tell = models.IntegerField(blank=True, null=True) # 整数
Mail = models.EmailField(max_length=100) # Email
Birthday = models.DateField() # 日付
Website = models.URLField() # URL
FreeText = models.TextField() # フリーテキスト
# テキスト表示
def __str__(self):
return self.Name
# 2つ目のテーブル
class Dog(models.Model):
# 項目定義
Name = models.CharField(max_length=100) # 文字列
Tell = models.IntegerField(blank=True, null=True) # 整数
Mail = models.EmailField(max_length=100) # Email
Birthday = models.DateField() # 日付
Website = models.URLField() # URL
FreeText = models.TextField() # フリーテキスト
# テキスト表示
def __str__(self):
return self.Name
その後、Migrationファイルを生成して
% python manage.py makemigrations
Migrateを実行
% python manage.py migrate
解決方法
そもそも1つ目のテーブルを表示させる時にadmin.pyをいじったことを思い出す。
admin.py
from django.contrib import admin
from . models import People
# Register your models here.
admin.site.register(People)
1つ目のテーブルのようにmodels.pyからPeopleだけでなくDogもimportして、registerしてみた。
admin.py
from django.contrib import admin
from . models import People, Dog
# Register your models here.
admin.site.register(People)
admin.site.register(Dog)
気づき
こんな簡単なことが分からなかった自分が恥ずかしい。
実際には2つのテーブルを同時生成したのではなく、1つ目を作成して管理サイトに表示された後に2つ目を追加しました。1つ目を作成する際にadmin.pyでimportしてからregisterしていたのですが、2つ目でもそれをやればよかったわけです。
同じ動作が再現しない場合には、最初の動作で何をしたのかを思い出し、複製してみることが大事だなと思いました。