2009-03-03 4 views
0

私はPythonとDjangoの新機能ですが、コードをレイアウトする方法についていくつかアドバイスをしたいと思います。モデルと検証の混乱 - アドバイスを探す

ファイルをアップロードできるモデルが作成されています。モデルの保存メソッドでは、ファイルに特定の拡張子があるかどうかを確認しています。 XML拡張子がある場合は、ファイルを開き、ファイルからいくつかの情報を取得してデータベースに保存します。私はこのモデルを働かせている。私は組み込みの管理でそれをテストしました。できます。

現在、エラーが発生した場合(XMLファイルではなくファイルを開くことができないため、特定の属性は存在しません)カスタムの「例外」エラーが発生します。私がの場合、は、フォームビューアやビルトイン管理ビューなど、ビューにこれらの「例外」エラーメッセージを渡して、フォームライブラリが使用されているかのようにエラーメッセージを表示する方法があります。それは可能ですか?

フォームライブラリを使用してもう一度検証チェックを書かなければならないと思っています。その場合、組み込みの管理テンプレートを使用することはできますが、これらのカスタム検証を追加するために使用するフォームを拡張できますか?

私の混乱を助けるものは何でも感謝します。


UPDATE:

ここでは、これまでの私のモデルですが、求めている人のために、 "NZBは、" XMLファイルのフィールドです。
http://dpaste.com/hold/6101/

管理インターフェイスは、あなたのモデルに関連付けるフォームを使用します。独自のビューでもフォームを使用できます。

これはまさに私がしたいことです。しかし、自分のフォームを自分のモデルと関連付ける方法はわかりません。今まで私が過去にフォームを作成したとき、彼らは常に独自のエンティティとして行動しました。私は、ModelFormクラスの使用中に管理ビューを使用することは決してできませんでした。あなたはこれについてどんな光をシードすることができますか?

私はあなたが私に与えたリンクを読んだことがあります。これは、私が過去にしたことであり、運がないことで縫い合わせています。

ファイルから属性を取得する方法はおそらくあります。

申し訳ありません、これを詳しく教えてください。方法はどこですか?


UPDATE:

それは私がcompleatly管理ビューにフォームをリンクするために、このステップを逃してきた縫い目。 http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin

これで、フォームで検証を実行できるようになりました。しかし、私は実際に検証を実際に処理する方法についてはまだ混乱しています。 S.Lottはそれが方法であるべきだと言いますか?

答えて

4

フォームエラーは自動的に管理ビューの一部です。

は、フォームに検証する場合は、一番幸せだhttp://docs.djangoproject.com/en/dev/ref/forms/validation/#ref-forms-validation

を参照してください - それは、フォームがのためにあるものです。管理インターフェイスは、モデルに関連付けたフォームを使用します。独自のビューでもフォームを使用できます。

ファイルから属性を取得するには、おそらくモデルクラスの別のメソッドである必要があります。モデルクラスの別のメソッドは、モデルクラスのsave()メソッドで使用することも、他の時にビュー関数で呼び出すこともできます。


"ModelFormクラスの使用中に管理ビューを使用することはできませんでした。

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#form

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin


"私はまだ実際に検証を処理する方法について困惑している。S.Lottそれは方法であるべきと言います?"

フォームでの検証は、clean()メソッドまたはclean_somefield()メソッドで行われます。

「管理者へのカスタム検証の追加」リンク(上記)は、「MyArticleAdminForm」フォームにclean_nameメソッドを追加する方法を示しています。

あなたがまだ混乱している場合は、実際にDjango Webページからコードを入力し、それが何をしているのかを確認してください。

+0

詳細については、私の質問を更新しました。もう一度見てもらえますか?あなたは私がしたいことを正確に理解するために継ぎ目を付けるが、私はまだそれをやる方法はまだ分かっていない。具体的には、フォームとモデルを関連させ、管理者がモデルフォームの検証エラーを取り上げるようにします。 –

+0

ありがとうございます!私はあなたに100票を与えることができれば嬉しいです! –

1

アップロードされたファイルのカスタム検証でFileFieldを拡張する特別なフィールドクラスを実装するのが最善の方法だと思います。

妥当性検査は、フィールドのcleanメソッドで実装されています。エラーが発生した場合は、XMLファイルをチェックし、ValidationErrorを上げる必要があります。管理システムは、カスタムエラーを他のフィールドエラーと同様に扱う必要があります。

ImageFieldクラスはこのような特殊な検証の良い例です。私はjust reading through the sourceを推奨します。

+0

ああ、そうです。したがって、ImageFieldクラスはFileFieldクラスの拡張ですが、余分な検証がありますか?面白い!しかし、検証のためにCleanメソッドでXMLファイルを開いてから、実際にデータを取得するSaveメソッドでXMLファイルを開く必要がありますか? –

1

管理サイトで使用するフォームを指定できます。その後、管理領域に表示されるフォームコードで検証を実行することができます。

管理サイトのドキュメント、特にthe form attribute of ModelAdminを参照してください。

0

"私はカスタム"例外 "エラーを投げています - 例外をどこに投げているのですか?あなたのモデルやビューで?

私はあなたの質問に混乱しています。だから私はあなたに「入力エラーがあればどこで捕まえなければならないのですか? ' あなた自身に。

私が見ているようにモデルとビューは小組立ラインのようなものです。 ビュー/フォームの検証は、最初に実行する必要があります。フォームを通じて入力データに問題がある場合。これは、form.is_valid()などを使用してフォームレベルで防止する必要があります。

モデルの機能は、CRUDの実行とは別にエンティティ自体に関するメタ情報を提供することです。理想的には、それがCRUD操作のために得ているデータについて悩まされるべきではありません。

関連する問題