前提・実現したいこと
pythonのフレームワークDjangoでシステムを構築中です。
form.py
のFormクラスで定義したフォームの初期値をビューから指定したいと思い、以下のページなどを参考にして、ビューのコードを書き換えたのですが、'EntryForm' object is not callable
というエラーでDjangoに怒られてしまいます。
0. https://qiita.com/sapuri/items/f6fb992334b6afb6196e
上記のページと自分のコードの差は、ビューが関数で書かれているかクラス(クラスベース汎用ビューFormView
)で書かれているかという点だろうと推測していろいろ調べた結果、最終的には、ビュー内でget_initial
メソッドをオーバーライドすることで初期値を指定することに成功はしたのですが、上記の参考ページのように、ビュー内でフォームクラス(クラス名EntryForm
)に括弧をつけて値を指定する方法だと、なぜnot callable
になるのかが分かりません。
'クラス'、'メソッド'、'関数'の基礎的知識が不足しているためだと思いますが、この戸惑いについて腹に落ちる解説、または参考ペーシを教えていただけますと幸いです。
あやふやな理解のまま開発を進めると、また同じような躓きで時間を取られそうで怖いので、一度きちんと理解したく、その手立てをご指南いただけると助かります。
どうかよろしくお願い致します。
該当のソースコード
python
1#forms.py 2class EntryForm(forms.Form): 3 name = forms.CharField( 4 max_length = 200, 5 initial = u'鈴木太郎', # 初期値 6 )
python
1#views.py 2#変更前のビュー 3class EntryInput(FormView): 4 form_class = EntryForm 5 template_name = "entry_input.html"
これを以下のように変更しました。(EntryForm
に括弧をつけて初期値を指定。)
python
1#views.py 2#変更後のビュー(1) 3class EntryInput(FormView): 4 form_class = EntryForm( initial = {'name': u'佐藤次郎'} ) 5 template_name = "entry_input.html"
すると'EntryForm' object is not callable
のエラーになります。
なお、以下のようのようにEntryForm
の後ろに括弧を付けただけでも同じエラーになります。
python
1#views.py 2#変更後のビュー(2) 3class EntryInput(FormView): 4 form_class = EntryForm() 5 template_name = "entry_input.html"
いろいろ調べて、最終的には、
python
1#views.py 2#変更後のビュー(3) 3class EntryInput(FormView): 4 form_class = EntryForm 5 template_name = "entry_input.html" 6 7 def get_initial(self): 8 initial = super().get_initial() 9 initial["name"] = u'佐藤次郎' 10 return initial
とすることで初期値を変更できました。
※最終的に参考にさせてもらったサイトは以下です。
0. https://qiita.com/maisuto/items/33dfeb58f5953d1c5fdf#クラスベース汎用viewとの連携
知りたいこと
知りたいことは、なぜ変更後のビュー(1)や(2)では'EntryForm' object is not callable
のエラーになってしまうのか、です。どうかご指南をよろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
サーバ:さくらVPS(centOS 7.5)
Python:3.6.5
Django :2.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/23 07:04 編集