2

私は現在、すでに構築されているモデルに取り組んでおり、検証管理を追加する必要があります。(2 つのフィールドへのアクセスとデータのチェック、それほど劇的なことはありません)

検証の観点からモデルとフォームの正確な違いについて疑問に思っていました.モデルビューのフォームビューのように、エラーを発生させるクリーンなメソッドを作成できるかどうか疑問に思っていました.

  • 追加の知識については、なぜこれらの 2 つのものが分離されているのですか?

そして最後に、あなたならどうしますか?モデル用に書かれたいくつかのメソッドがすでにあり、それを書き直してフォームにモーフィングし、単純に clean() メソッドを追加するかどうかはまだわかりません+それらがどのように機能するか正確にはわかりません。

ああ、すべてが管理インターフェースにありますが、それほど前にdjangoを始めて以来、まだ多くの作業を行っていません。

前もって感謝します、

4

2 に答える 2

2

モデル (フィールド) 検証を使用して、返されるデータ型がデータベースの要件を満たしていることを確認する必要があります。通常、django の組み込みフィールドがこれを行うため、これは必要ありません。そのため、カスタム フィールドを作成したり、自分が何をしているのかを知っていない限り、変更するべきではありません。

フォームの検証は、ユーザーの入力をクリーンアップする場所です。たとえば、clean_FIELD(self) メソッドを追加することで、すべてのフォーム フィールドにクリーンなメソッドを追加できます。

class ContactForm(forms.Form):
    # Everything as before.
    ...

    def clean_recipients(self):
        data = self.cleaned_data['recipients']
        if "fred@example.com" not in data:
            raise forms.ValidationError("You have forgotten about Fred!")

        # Always return the cleaned data, whether you have changed it or
        # not.
        return data

フォームのメインのクリーン メソッドが実行される前に、各フィールドのフィールド レベルのクリーンをチェックします。

于 2012-07-23T09:51:32.290 に答える
0

一般に、モデルは永続ストレージ (通常はリレーショナル DB) に格納されるビジネス エンティティを表します。フォームは、ユーザーからデータを取得できる HTML フォームをレンダリングするために使用されます。

Django は、モデルに基づくフォームの作成をサポートしています (ModelForm クラスを使用)。フォームは、永続ストレージに保存する必要があるデータをフェッチするために使用できますが、それだけではありません。フォームを使用して、永続ストレージで検索するデータを取得したり、外部サービスに渡したり、アプリケーション カウンターにフィードしたり、Web ブラウザーをテストしたりすることもできます。エンジン、ユーザーが入力したデータ (「Hello USERNAME」など)、ログイン ユーザーなどに基づいてテキストをレンダリングします。

モデル インスタンスで save() を呼び出すと、データのみが有効な場合にデータが永続ストレージに保存されることが保証されます。これにより、ユーザーがクリックした後にビジネス エンティティが保存されるかどうかに関係なく、永続ストレージに保存する前にデータを検証する一貫したメカニズムが提供されます。 Web ページまたは django インタラクティブ シェルの [保存] ボタンは、ユーザーがモデル インスタンスの save() メソッドを実行します。

于 2012-07-23T09:58:45.357 に答える