これは非常に単純な django パターンの質問です。私のマネージャー コードは通常 models.py にありますが、models.py が本当に巨大な場合はどうなりますか? 保守性を高め、循環インポートを回避するために、マネージャー コードを models.py に置く他の代替パターンはありますか?
なぜ models.py がこれほど巨大なのかという疑問が生じるかもしれませんが、そのサイズと有用性の幅が正当であると仮定しましょう。
これは非常に単純な django パターンの質問です。私のマネージャー コードは通常 models.py にありますが、models.py が本当に巨大な場合はどうなりますか? 保守性を高め、循環インポートを回避するために、マネージャー コードを models.py に置く他の代替パターンはありますか?
なぜ models.py がこれほど巨大なのかという疑問が生じるかもしれませんが、そのサイズと有用性の幅が正当であると仮定しましょう。
モデルをmodels.pyに、マネージャーをmanagers.py(forms.pyのフォーム)にすべて同じアプリ内に保持することを好みます。より一般的なマネージャーの場合、他のアプリで再利用できる場合は、core.managersに保持することをお勧めします。モデル/modelname.pyを使用する一部の大規模なアプリでは、マネージャーとモデルコードが含まれていますが、悪くはないようです。
モデルの大規模なセットでの最善の策は、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.
これは、モデル ファイルが巨大になったときに使用する構造ですが、プラグイン可能なアプリにできるだけ頻繁に分割するようにしているため、これを使用することはめったにありません。
お役に立てれば。
私はいつもmanagers.pyに私のものを置きます。循環インポートの問題がある場合は、a)self.modelでマネージャーのモデルクラスを参照でき、b)関数内でインポートを実行できることを覚えておいてください。
Django アプリをビルドするときに私が行ったことは、特定のモデル コード、マネージャー コード、および場合によってはフォーム コードのみを含む [modelname].py ファイルを作成し、__init__.py ファイルを使用してすべてをモデル ディレクトリにインポートすることでした。これは、少なくとも管理しやすくするのに役立ちました。