2011-07-12 155 views
2

私は非常に長いforms.pyを持っていますので、できる限りコードを変更することで小さな部分に分割したいと思います。Django:いくつかのファイルでforms.pyを分割します

アイデア?

+0

具体的に何が問題になっていますか?なぜこれは難しいのですか? –

+0

答えは明らかに単純だと答えています。私はsplit.pyがちょっと混乱していることを知っているので、私はキャッチがあるかどうかわからなかったので尋ねました。 – Max

答えて

2

Djangoフォームクラスをforms.pyファイルに入れる主な理由は、慣習です。他の人があなたのアプリケーションを見て、どのファイルでどのようなものが見つかるかを知ることが容易になります。規約に従うことは良いことですが、法律ではなく、自由にコードを整理することができます。ここで

は私がやるだろうと何:

まず第一に、あなたが重複したコードを因数分解することにより、コードの量を減らすことができます参照してください。一般的な検証ロジックはcustom validatorsに引き込むことができます。フィールドまたは機能を共有するフォームは、共通の親から継承できます。

カスタムフィールドクラスを作成した場合は、アプリケーションディレクトリにあるformfields.pyというファイルにすべてのフィールドクラスを分けて、forms.pyにインポートするだけで済みます。同様に、カスタムバリデータがある場合は、それらを取り出してインポートすることができます。

あなたのために十分なファイルサイズが縮小されていない場合は、関数ごとにフォームクラスを複数のファイルに分割します。 forms_user.py,forms_products.py,forms_data_entry.pyなどです。そうすれば、特定のファイルで何が見つかるかはまだ明らかです。あなたの古い書式が参照されている場所であれば、import文を変更する必要がありますが、必要な変更のみが必要です。

+0

これは良いアイデアです。私は今これについて考えている。私が考えていたのは、各モジュールに 'forms.py'を置くことでしたが、これは反対のDjango-ishだと思われますので、私はこれらの他のアイデアを使うことを考えています... – nicorellius

8

私はコメントできませんので、私は答えを書いています。あなたがすることができる他の事appディレクトリにforms ディレクトリ(約__init__.pyを覚えている)を作成し、formone.pyするフォームを分割し、form2.pyすることで、...

次にあなたがそのfrom myapp.forms.formone import FormOneのような形をインポートすることができます

それとも__init__.pyあなたが置くことができるコードで

from formone import * 
from form2 import * 

そして、あなたが本当にしたい場合は、from myapp.forms import FormOne

0

でフォームをインポートすることができます可能な限り変更を少なくするために、forms.pyを関数(forms_user.py、forms_product.py)で複数のファイルに分割するのが最も簡単です。

リファクタリングや新しいプロジェクトを開始する時間がある場合は、プロジェクトの各コンポーネント(ユーザー、プロジェクトなど)ごとに独自のforms.pyファイルを使用して新しいdjangoアプリケーションを作成することをお勧めします。単一のdjangoアプリが大きすぎるとスケーリングが止まる場合(models.py、views.pyなど)、メンテナンスが難しくなります。

関連する問題