Djangoで個人的にハマった事。その4

個人的な備忘録です^^
ハマったって程ではないけど少し期間経った時に忘れてそうなので残しておこうかと。

1.__init__() got an unexpected keyword argument 'instance'エラー

forms.pyで定義したフォームを生成しようとしたらエラーが発生した。
元々ちゃんと動いてたのにな〜って思ったらFormをforms.ModelForm⇨forms.Formに変更してたからだった^^;
下記のようにinstanceではなくinitialで対応

######
# forms.py
######
# 修正前
# class tableForm(forms.ModelForm):
#     class Meta:
#         model = T_table
#         fields = ('aaa', 'bbb', 'ccc')
   :
   :
   :
# 修正後
class tableForm(forms.ModelForm): 
    aaa = forms.CharField(
       label='aaa',
       widget = forms.HiddenInput,
       required = False,
    )
    bbb = forms.CharField(
       label='bbb',
       max_length = 30,
       required = False,
    )
    ccc = forms.CharField(
       label='ccc',
       max_length = 10,
       required = False,
    )
    :
    :
    :
    
######
# views.py
######
# DBから値取得
results = T_table.objects.all()
   
list = []
for result in result:
#   list.append(tableForm(instance=result)) ←ここでエラーが発生
# これで対応
list.append(tableForm(initial={'aaa':result.aaa,
                               'bbb':result.bbb,
                               'ccc':result.ccc,
                                    :
                                    :
                                    :
                                }))
return list

2.テンプレートに出力された入力フォームのIDが変わった

forms.pyで定義したフォームをforms.ModelForm⇨forms.Formに変更した際にauto_id=の設定を変更してしまっていた。
auto_id=Trueにするとフォームフィールド名をそのままID属性に設定すると公式ドキュメントに記載されていた。
何も設定していない時は頭にid_がつく。

#####
# views.py
#####
def createTemplateBindDate(aForm, bForm):
   d = {
       'aForm': aForm,
       'bForm': bForm,
       # テンプレートに出力される時にID属性値が変わる
      #'addAForm': AForm(auto_id=True), 
       'addAForm': AForm(),
   }
   return d
   
#####
# A.html(テンプレート)側のjavascript部分
#####
//var aId = $('[id=aid]').value; 元々動いてたのに取れなくなった
var aId = $('[id=id_aid]').value; // id_が頭につく

この記事が気に入ったらサポートをしてみませんか?