Djangoでmodels.pyの分割
最近Pythonフレームワーク、Djangoを触ってます。
そこそこ軽量で、テスト用Webサーバやタスクなんか揃ってて気に入っているのですが、使ってると不満も出てきます。その1つがMVCのモデルを表すmodels.pyです。
これ、普通に作ってるとアプリ毎にmodels.pyという名前で用意しないといけないので、沢山のモデルがある場合に巨大なファイルになってしまうし、アプリがいくつかあると、どこに何のモデル置いてたかわからなくなってしまうのです。
希望としては、テーブル名+.pyとして、プロジェクトに対して1箇所のディレクトリにまとめたいです。まぁそれは出来るのですが、manage.pyタスクのsqlやsyncdbも有効に使いたいです。
これが良い方法かはまだ分かりませんが、何とか出来たのでその方法です。
ディレクトリ構造です。modelsディレクトリを作成して、モデルは全てそこに置きます。 + mysite/ + models/ |- __init__.py |- models.py # 空ファイル |- table1.py |- table2.py |... .
各モデルファイルはこんな感じです。 from django.db import models class Table1Model(models.Model): title = models.CharField(max_length=50) class Meta: app_label = "models"
__init__.pyに読み込むモデルを書いておきます。 table1 import Table1Model table2 import Table2Model ...
あとはsettints.pyのINSTALLED_APPSに、modelsを追加しておきます。manage.pyのsqlでSQL作成、syncdbでテーブルも作成されます。モデルのファイルのapp_labelがテーブル名のプレフィックスに付きます。上の例ならmodels_table1modelテーブルが作成されます。
modelsアプリケーションがあるとDjangoに認識させてるわけで、空でも良いのでmodels.pyのファイルを用意しなくちゃいけないのがバッドノウハウです。マイグレーションもしてくれないし、manage.pyのタスクを作っちゃうってのもありかも。