通常でDjangoのプロジェクト、それらのほとんどは、私たちの中に書かれてDjangoのモデル密接にマッピングされた形。たとえば、あなたが持っているかもしれブックモデルを、あなたが作成したいフォームのモデルに書籍情報を追加したり編集するためのフォームを。この場合、中のフォーム私たちはモデルでこれらのフィールドを定義したので、フォームフィールドの定義冗長になります。
このような理由から、Djangoは我々からできるように、ヘルパークラスを提供してDjangoのモデルを作成するフォームである、のModelFormを。
ModelFormサブクラス定義されました
フォームとモデルあなたに基づいて究極の結合、モデルはの対応するフィールドに変換されたフォームフィールド、および操作や、あなたのラベルを生成します。
モデルのテーブルでは、次のとおりです。
クラスブック(models.Model):
NID = models.AutoField(PRIMARY_KEY = 真)
タイトル= models.CharField(MAX_LENGTH = 32 )
publishDate = models.DateField()
価格= models.DecimalField(max_digits = 5 、decimal_places = 2 )
= models.ForeignKeyを公開(する= "公開"、to_field = "NID" )
著者= models.ManyToManyField(に= '著者'、)
デフ __str__ (自己):
返す自己.TITLE
ModelForm クラスの書き込み:
クラス BookForm(forms.ModelForm):
クラスメタ:
モデル= models.Book
フィールド= "__all__"
ラベル= {
"タイトル":" 书名"、
"価格":" 价格"
}
ウィジェット= {
"パスワード":forms.PasswordInput(ATTRSの= { "クラス":"C1" })、
"publishDate":forms.DateInput(ATTRSの= { "タイプ":"日付" })、
}
クラスのメタ共通パラメータ:
= models.Bookモデル #対応するモデルクラス
=フィールド[] #指定されたフィールド
=フィールド「__all__」 #のフィールドが変更された場合は、__all__、リストされたすべてのフィールドを表すためにあります
=除外[] #負のフィールド
=ラベル{} #1 メッセージ
= help_texts {} #のヘルプ情報
= {ウィジェット#のカスタムプラグ
"パスワード":forms.PasswordInput(ATTRSの= { "クラス":"C1" })、
"publishDate":forms.DateInput(ATTRSの= { "タイプ":"日付" })、
}
= {error_messages、 #のカスタムエラーメッセージ
「タイトル」:{ 「必要」:「空にすることはできません」、...} #各フィールドのすべてのエラーを書き込むことができます
}
続いてforms.ModelForm時のクラス、モデルでOnetooneと多対多プロパティは自動的に変換されModelChoiceFieldとModelMultipleChocieField自動的にデータを読み込みます。
ModelFormサブクラス使用中のデータ・コンポーネントを追加し、それを直接使用することができる()保存方法を、使用して保存するインスタンス化するとき第2の目的は、指定されたキーワードのパラメータを持っている場合、時間法をインスタンスを更新操作と比較して、!