読者です 読者をやめる 読者になる 読者になる

へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)!

Djangoで、pythonシェルからmigrate前のモデルのフィールドを見る方法

>>> from django.db.migrations.state import ProjectState
>>> from django.apps import apps
>>> for f in ProjectState.from_apps(apps).models[('applabel', 'hogemodel')].fields:
... print(f)
...
('id', <django.db.models.fields.AutoField>)
('created_at', <django.db.models.fields.DateTimeField>)
('updated_at', <django.db.models.fields.DateTimeField>)

意味

applabel ... DBのテーブルにつけるprefix
hogemodel ... modelの名前。すべて小文字になる。DBのテーブルに付けるsuffix

applabel_hogemodelのようなテーブルがつくられる

したがってマイグレート前にここをハックすれば、変な名前のデータベースを作れる
(誰も作りたくない)

Djangoは、migrate時に、このフィールドと昔のフィールドとをset(集合)で比較して、migrateするかどうか判定しているっぽい
Djangoのソースを読んだ感じそうなってた)