Sprawdzanie poprawności formularza z przeciążonym _init_
Mam formularz z nowymw tym metoda, która pozwala wyświetlać różne opcje według parametru:
class Isochrone_Set_Parameters(forms.Form):
Grid_Choices = Grids_Selection.Grid_Choices
def __init__(self, Grid_Type, *args, **kwargs):
super(Isochrone_Set_Parameters, self).__init__(*args, **kwargs)
if Grid_Type == Grids_Selection.Grid_Values[0]:
Choices = (('0.0','0.0'),('0.1','0.1'),('0.3','0.3'),('0.5','0.5'),('0.6','0.6'),('0.7','0.7'), \
('0.8','0.8'),('0.9','0.9'),('0.95','0.95'))
self.fields['Rotation_Rate'] = forms.ChoiceField(choices=Choices)
elif Grid_Type == Grids_Selection.Grid_Values[1]:
Choices = (('0.0','0.0'),('0.568','0.568'))
self.fields['Rotation_Rate'] = forms.ChoiceField(choices=Choices)
else:
Choices = (('-1.0','-1.0'),('-2.0','-2.0'))
self.fields['Rotation_Rate'] = forms.ChoiceField(choices=Choices)
self.fields.keyOrder = [
'Selected_Grid',
'Metallicity',
'Mass',
'Rotation_Rate']
Selected_Grid = forms.ChoiceField(choices=Grid_Choices)
Metallicity = forms.FloatField()
Mass = forms.FloatField()
i następujący widok:
def Isochrone(request):
if request.method == 'POST':# If the form has been submitted...
form = Isochrone_Set_Parameters(request.POST) # A form bound to the POST data
if form.is_valid():
return HttpResponse("C'est ok")
else:
return render_to_response("Site/Isochrone.html",{
'form': form
},context_instance=RequestContext(request))
else:
form = Isochrone_Set_Parameters(Grid_Type = "NotSet",initial={'Metallicity': -1.0, 'Mass': -1.0, 'Rotation_Rate': -1.0}) # An unbound form
return render_to_response("Site/Isochrone.html",{
'form': form
},context_instance=RequestContext(request))
Po wysłaniu formularza test form.is_valid () nie powiódł się. Nie mam komunikatów o błędach, a wartość przesłana jest dostępna poprzez formularz.POST. [„Moja_Wartość”]. Nie rozumiem, co robię źle. Czy ktoś może mi podpowiedzieć, jak to naprawić?
(Dokładnie stwierdzam, że błąd wydaje się być związany z przeciążeniemw tym metoda w formie, ponieważ jeśli umieściłbym proste pole wyboru dla Rotation_Rate, to działa idealnie.)
Dzięki !