こんな感じのdjangoアプリがあるとして
models.pyの中にはモデルクラスAaaとかBbbとかがあるとする。+ [app] + models.py + views.py + その他
こんな感じにしてみた。
+ [app] + [models] + __init__.py + Aaa.py + Bbb.py + views.py + その他
Aaa.py は普通にこんな感じに書くだろうとして、
# -*- coding: UTF-8 -*- from django.db import models class Aaa(models.Model): name = models.CharField(max_length=50) class Meta(object): app_label = 'app'
__init__.pyはこう書けばこれはこれでいいっぽいんだけど
from Aaa import * from Bbb import *
思いつきの開発中にモデルを色々こねくり回す事を考えると
ソースファイル作ったり消したりした後に
いちいち__init__.pyを直すのも面倒だなーと思い、
何とかならないか色々試行錯誤した挙句…。
__scope = locals() def __modelLoader(): import inspect import os curdir = os.path.dirname(__file__) for file in os.listdir(curdir): root,ext = os.path.splitext(file) if root[0] not in ['_','.'] and ext == ".py": obj = __import__(root,globals(),locals()) for att in dir(obj): if att[0] not in ['_']: attobj = getattr(obj,att) if inspect.isclass(attobj): __scope[attobj.__name__] = attobj __modelLoader() del __scope
とてもとてもうさんくさい。
配列外のlocals()の戻り配列に追加とか、アリなのか?
とりあえず、動いてはいるっぽい。
新しくCcc.pyを書き足してmanage.py syncdbすると新しくテーブルも作られた。
どう考えても、modelが固まったら普通にimportの列挙に替えるべき…。
0 件のコメント:
コメントを投稿