25

これは非常に単純な django パターンの質問です。私のマネージャー コードは通常 models.py にありますが、models.py が本当に巨大な場合はどうなりますか? 保守性を高め、循環インポートを回避するために、マネージャー コードを models.py に置く他の代替パターンはありますか?

なぜ models.py がこれほど巨大なのかという疑問が生じるかもしれませんが、そのサイズと有用性の幅が正当であると仮定しましょう。

4

4 に答える 4

32

モデルをmodels.pyに、マネージャーをmanagers.py(forms.pyのフォーム)にすべて同じアプリ内に保持することを好みます。より一般的なマネージャーの場合、他のアプリで再利用できる場合は、core.managersに保持することをお勧めします。モデル/modelname.pyを使用する一部の大規模なアプリでは、マネージャーとモデルコードが含まれていますが、悪くはないようです。

于 2009-12-10T19:43:06.927 に答える
11

モデルの大規模なセットでの最善の策は、django モジュールを有利に使用し、models という名前のフォルダーを作成することです。古い models.py をこの models フォルダーに移動し、名前を変更し__init__.pyます。これにより、各モデルをこのモデル フォルダー内のより具体的なファイルに分けることができます。

__init__.pyその後、各モデルをの名前空間にインポートするだけで済みます。

したがって、たとえば、次のように分割することができます。

yourapp/
    models/
        __init__.py # This file should import anything from your other files in this directory
        basic.py # Just an example name
        morespecificmodels.py # Just an example name
        managers.py # Might want to separate your manager into this

次に、次の__init__.pyようになります。

from basic import * # You should replace * with each models name, most likely.
from managers import YourManager # Whatever your manager is called.

これは、モデル ファイルが巨大になったときに使用する構造ですが、プラグイン可能なアプリにできるだけ頻繁に分割するようにしているため、これを使用することはめったにありません。

お役に立てれば。

于 2009-12-10T20:07:18.883 に答える
9

私はいつもmanagers.pyに私のものを置きます。循環インポートの問題がある場合は、a)self.modelでマネージャーのモデルクラスを参照でき、b)関数内でインポートを実行できることを覚えておいてください。

于 2009-12-10T19:51:03.157 に答える
4

Django アプリをビルドするときに私が行ったことは、特定のモデル コード、マネージャー コード、および場合によってはフォーム コードのみを含む [modelname].py ファイルを作成し、__init__.py ファイルを使用してすべてをモデル ディレクトリにインポートすることでした。これは、少なくとも管理しやすくするのに役立ちました。

于 2009-12-10T19:24:17.270 に答える