2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Djangoで単一アプリに複数テーブルを持たせる方法

Last updated at Posted at 2023-02-03

背景

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つ目のテーブルしか表示されない。
スクリーンショット 2023-02-03 20.28.27.png

解決方法

そもそも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)

見事にDogsも管理サイトに表示されました!
スクリーンショット 2023-02-03 20.31.41.png

気づき

こんな簡単なことが分からなかった自分が恥ずかしい。
実際には2つのテーブルを同時生成したのではなく、1つ目を作成して管理サイトに表示された後に2つ目を追加しました。1つ目を作成する際にadmin.pyでimportしてからregisterしていたのですが、2つ目でもそれをやればよかったわけです。
同じ動作が再現しない場合には、最初の動作で何をしたのかを思い出し、複製してみることが大事だなと思いました。

2
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?