Reputation: 21
I have created registration form. When I click on submit button, form.is_valid() returns false. And so my data is not saved. Django version: 1.4 Below is my code:
forms.py
class RegisterForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs)
self.fields['user_type'].required = True
class Meta:
model=RegisterModel
index.html
<form action="/registration/" method="POST">
<table border="0" cellspacing="8" align="center">
<tr>
{{form.user_type.errors}}
<td> User Type:</td>
<td style="text-align:left !important">{{ form.user_type }}</td>
</tr>
<tr>
{{form.pricing_plan.errors}}
<td class="align-left" width="85">Pricing Plan:</td>
<td width="190" style="text-align:left !important">{{ form.pricing_plan }}</td>
</tr>
<tr>
{{form.full_name.errors}}
<td class="align-left">Full Name:</td>
<td>{{ form.full_name }}</td>
</tr>
<div class="submit-reset">
<input type="submit" value="Submit" id="button" class="sub-res-btn"/> <input type="Reset" id="button" class="sub-res-btn"/>
</div>
</form>
views.py
def user_registration(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
print "form is valid or not", form.is_valid()
if form.is_valid():
form.save()
return HttpResponseRedirect('/marketing/')
extra_context = {}
extra_context['form'] = RegisterForm()
return render_to_response('index.html', extra_context, context_instance=RequestContext(request))
Upvotes: 0
Views: 2755
Reputation: 53326
Do not reset form when you get invalid form and also show {{form.non_field_errors}}
in the template.
You can update the view code as:
def user_registration(request):
extra_context = {}
if request.method == 'POST':
form = RegisterForm(request.POST)
print "form is valid or not", form.is_valid()
if form.is_valid():
form.save()
return HttpResponseRedirect('/marketing/')
else:
form = RegisterForm()
extra_context['form'] = form
return render_to_response('index.html', extra_context,
context_instance=RequestContext(request))
Upvotes: 2