DjangoのFormは、少々複雑なので、イメージが難しい所ですね(;'∀')
通常のFormでは、Fieldを自ら定義しなければなりませんが、ModelFormは連携するModelをもとにFieldが定義されます。
Formというと、HTMLのFormを再現するものというイメージが強いと思います。
その部分は、あくまでDjangoのForm(ModelForm)の役目の一つです。
テンプレートタグで、いろいろ展開する部分が、これですね。
Djangoでは、サーバーサイド側のバリデーションにもForm(ModelForm)が利用されます。
(汎用ビューを利用すると、そのあたりの仕組みが見えなくてイメージしにくいですが・・・)
サーバーサイドで、バリデーションを行う場合、Postで送られてきたデータをもとに、**Form(ModelForm)インスタンスを再度生成(←イメージしにくい部分です)**します。これを、データが結びつけられたフォーム(bound form)と呼びます。
bound formの場合、Formでは、バリデーションの実行(is_valid()の実行)と、バリデーションが正常に終われば、クリーニングされたデータ(cleaned_data)を取り出せますが、ModelFormでは、それに加えて、Modelに直接save()することができます。
単一のモデルに関するFormを作るのであれば、ModelFormが便利だと思います。
入力された値を、複数のモデルに分けて保存したり、何らかの計算・加工して保存する必要があるのであれば、Formでデータをクリーニングし、そのデータをもとに、それぞれのモデルに書き込む処理を実装するような感じになります。
イメージわきますでしょうか??
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/09 12:04
2018/09/09 12:34
2018/09/09 12:41
2018/09/09 12:54
2018/09/09 13:05
2019/04/25 12:28