膨大な量のサブアプリケーションを備えた巨大な Django アプリを手に入れました。現在、私は 1 つのサブアプリでモデルの再加工に取り組んでいるので、問題が発生しました。モデルを操作するための分離された醜い関数が大量にあります。基本的には、次のようなものです。
def get_some_things(...):
def postprocess(...):
pass
def preprocess(...):
pass
preprocess(...)
x = MyModel.objects.....get(1)
return postprocess(x, ...)
そして、私はこのような関数をたくさん持っていますが、それは本当に醜いです! そして、それは現在のコード(のようなDatabaseAccessor.get_db().django_kitty().get_some_things(...)
)で使用されています。したがって、私の考えは、開発者がこれらの関数を次のように使用できるようにすることでした。
MyModel.get_some_things(...)
または、次のようにします。
MyModel.objects.get_some_things(...)
しかし!関数が多すぎて、model.py 内に書ききれません。だから、私はいくつかのアイデアを得ました:
- model_mymodel.py を作成し、モデル内のすべての関数と静的関数を使用してモデルを定義します。しかし...よくわかりませんが、モデルクラスに入れる必要がありますか?
- mymodel_manager.py を作成し、mymodel のモデル マネージャーを作成し、ここで関数を定義します。しかし...私の「関数」のいくつかは、辞書、リスト、または数値だけを返す必要があります。モデル マネージャが QuerySet 以外のものを返せるようにするのはイデオロギー的に間違っているのでしょうか?
__getattr__
MyModel クラスをオーバーライドしfunctions_common.py
、functions_things.py
などのモジュールを動的にロードし、収集した関数を辞書に格納し、必要に応じて呼び出しますか?