0
私のPOSTデータをこのフォームにバインドしようとすると本当に苦労しています。 POSTデータは正しく出力されており、正しい形式であるように見えますが、検証のためにフォームにバインドすることは絶対に拒否されます。私はこれに新しいので、私は何かが明らかに欠けていると確信していますが、なぜこれが起こっているのかを理解する助けがあれば幸いです。DjangoフォームはPOSTデータにバインドされません
views.py
def new_call(request):
if not request.user.is_authenticated():
return redirect(login_view)
if request.method == "POST":
form = RegisterCallForm(request.POST,user=request.user)
#Prints False
print form.is_bound
if form.is_valid():
answered = form.cleaned_data['answered']
left_message = form.cleaned_data['left_message']
contact_pk = form.cleaned_data['contact']
time_called = form.cleaned_data['time_called']
note = form.cleaned_data['note']
staff_person = request.user.userprofile
call = Call(
staff_person=staff_person,
contact=contact,
answered=answered,
left_message=left_message,
time=time_called,
note=note,
)
call.save()
if request.POST.get('submit') == 'continue':
return redirect(user_profile_view)
else:
return redirect(new_call)
else:
form = RegisterCallForm(user=request.user,)
return render(request, 'supporttracker/register_call.html',{'form':form})
そして、ここでは、フォームの...
forms.py
class RegisterCallForm(forms.Form):
def __init__(self,*args,**kwargs):
self.user = kwargs.pop('user',User)
super (RegisterCallForm, self).__init__(*args,**kwargs)
self.fields['contact'] = forms.TypedChoiceField(
choices = get_contact_list(self.user),
label = 'Call with',
)
new_fields = OrderedDict()
new_fields['contact'] = self.fields['contact']
new_fields['answered'] = self.fields['answered']
new_fields['left_message'] = self.fields['left_message']
new_fields['time_called'] = self.fields['time_called']
new_fields['note'] = self.fields['note']
self.fields = new_fields
answered = forms.TypedChoiceField(
label='Answered:',
coerce=lambda x: x == 'Yes',
choices=((False, 'No'), (True, 'Yes')),
widget=forms.RadioSelect
)
left_message = forms.TypedChoiceField(
label='Left a message:',
coerce=lambda x: x == 'Yes',
choices=((False, 'No'), (True, 'Yes')),
widget=forms.RadioSelect
)
time_called = forms.DateTimeField(
label = 'Time of call',
initial = datetime.datetime.now,
required = False,
)
note = forms.CharField(
max_length=500,
widget=forms.Textarea,
required=False,
)
検証に失敗したものを確認するのはそれほど難しいことではありません。 'else 'ブランチを' if form.is_valid() 'に追加して' form.errors'を表示すると、どのフィールドにエラーが出るのかがわかります。 –
私はそれをしても何の誤りもありません。私は 'print form.is_bound'をすでにそこに持っていて、常に' False'を出力します。 – Nikolai0045
あなたのフォームを構成する方法はちょっと変わっています。あなたはそれをなぜ行うのか分からないので、 'self.fields '(それが正しいように見えますが)。あなたの 'request.POST'を印刷しましたか?何かありますか? –