Djangoくりーむわーかープログラムとか。・試しててハマった事など。誰かのお役に立てば幸いかと。その他、いろいろエトセトラ。何かの設定とかに応じてモデルを作りたい場合はちょっと使えない。SQLを自前で書いてゴニョゴニョしてもいいんだけど、ORMは出来ればDjangoの使いたいのでどうにかしたい。いうことで、モデルを動的に作りたくなった場合。あと、動的に作ったモデルのテーブルも動的に作りたい場合についても。参考:https://code.djangoproject.com/wiki/DynamicModels※すごく古いのでちょっと微妙かも。動的にモデル作る本体は下の感じ。model普通にクラス定義するときにやってる事を、コードで書いてるだけ。attrs)models.Modelを継承したクラス定義にする。使うかというと↓の感じ。ret.objects.all()q.values()ただ、動的に作ったモデルはDBにはまだテーブル作られてないので、save()とか、objects.all()とかはもちろん動ない。テーブルをこの作ったモデル定義が作成する場合はschema-editorを使う。"\n".join(se.collected_sql)collect_sqlをTrueにすると、操作に対してのSQLがcollected_sqlのlistにたまってくので、最後に「"\n".join(se.collected_sql)」で全部取るみたいな。collect_sqlをTrueにした場合は、create_model()とかしても、SQLは発行されない。あと、作ったモデルは↓の感じで使いまわせる。ret.objects.all()q.values()「apps.all_models」がDjangoがmodel定義を全部キャッシュしてある場所。削除したい場合はここから消せばいい気がするんだけど、ちゃんと調べてないので、要調査。今のとこ使い終わった場合は↓の感じで消す。これないとapps.get_models()から消えてないあと、外部キー制約がどうもうまくいかなかった。単純なテーブルのORMやるだけなら十分。ここまで書いてて、こんなパッケージがある事に気づいた。typeでクラス定義を書き換えるなんのこっちゃって感じ。rest_frameworkのソース読んでて、あー、これはこういう事に使うのかってピンと来たので残しておく。serializers.DateTimeField()こんな感じで、「クラス変数」にモデルの定義を入れてる。結局全インスタンスで共有されてる変数。DjangoもRestFrameworkもちゃんとインスタンス変数になってる。なんでかなーって不思議だったんですが、ソース読んでると、metaclassの定義使って、クラス定義読み込まれる時に、クラス変数を潰して、インスタンス変数作ってるんですね。RestFrameworkのソースだと↓の部分。x[1]._creation_counter)attrsにクラス定義でのクラス変数とか入ってて、これが最終的にクラス定義内に展開されるっぽい。attrs.popでクラス変数として消してる。消すタイミングで、fieldsって変数に定義を退避してる感じ。attrs)」してるという感じ。