私はdjangoが初めてで、フォームのクラスベースのビューを書いています。問題は、このフォームがうまく表示されることですが、投稿するとフォームが無効になります。
デフォルトのバリデーターがフォームを検証するために何をすべきかわかりません。フォームには 2 つのフィールドがあります。1 つは選択肢フィールドで、その選択肢はログイン ユーザーに基づいて動的に設定されます。もう 1 つは CharField です。CharField はフリー テキストであり、ChoiceField はユーザーのデータに基づくため、検証の必要はありません。
フォーム.py
class HomeForm(forms.Form):
phones= forms.ChoiceField(label='Select phone', choices = (), required=True)
message = forms.CharField(max_length=10, required=True)
def __init__(self, user, *args, **kwargs):
super(HomeForm, self).__init__(*args, **kwargs)
print >> sys.stderr, 'form init'
self.fields['phones'].choices = [(ids.id, ids.phone_model.short_name) for ids in GCM_RegId.objects.filter(user=user)]
def process(self, user):
cd = self.cleaned_data
regid_id = cd['phones'].value
gcm_regid = GCM_RegId.objects.filter(id=regid_id)
ビュー.py
class HomeView(FormView):
template_name = "home.html"
form_class = HomeForm
success_url = 'home'
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if(form.is_bound):
print >> sys.stderr, "Form is Bound"
else:
print >> sys.stderr, "Form is NOT Bound"
if form.is_valid():
print >> sys.stderr, "Form Valid"
return self.form_valid(form)
else:
print >> sys.stderr, "Form NOT Valid"
return self.form_invalid(form, **kwargs)
def get_form(self, form_class):
form = HomeForm(self.request.user, {})
return form
def form_valid(self, form):
form.process(self.request.user)
print >> sys.stderr, "RegIdSubmitView form_valid"
return super(HomeView, self).form_valid(form)