I am trying to get validation errors to appear on my web page when using an
inlineformset_factory. I have a main form called PersonalInformation form
and 3 inline forms (Relative, PositionHeld and Phone). I am receiving the
main form errors on my page, but I can't get the 3 inline forms to display
the errors.
Do I need to write custom errors?
Can anyone help? I have searched on Google and tried several different
things with no luck.
Thanks.
*#form.py*
class PersonalInformationForm(forms.ModelForm):
class Meta(object):
model = Applicant
fields = ('position', 'salutation', 'first_name', 'middle_name',
'last_name', 'suffix',
'address1', 'address2', 'city', 'state', 'zip_code',
'province', 'country', 'origin_country',
'is_us_armed_forces', 'armed_forces_branch',
'is_relative_of_pcusa',
'is_previous_employee', 'is_legal_work_in_us',)
def __init__(self, *args, **kwargs):
super(PersonalInformationForm, self).__init__(*args, **kwargs)
self.fields['address1'].required = True
self.fields['city'].required = True
self.fields['zip_code'].required = True
self.fields['country'].required = True
self.fields['origin_country'].required = True
self.fields['is_legal_work_in_us'].required = True
def clean(self):
if 'province' in self.cleaned_data and
self.cleaned_data.get('province') == '':
if not self.cleaned_data.get('state'):
self._errors['state'] = ErrorList(['Must select state if
province is not entered.'])
if self.cleaned_data.get('is_us_armed_forces'):
if self.cleaned_data.get('armed_forces_branch') == '':
self._errors['armed_forces_branch'] = ErrorList(['You must
enter branch if you checked that you served in the U.S. Armed Forces.'])
return self.cleaned_data
*#views.py*
@login_required
def personal_information(request, expected_applicant_id, position_id,
private_code):
expected_applicant = get_object_or_404(ExpectedApplicant, \
pk=expected_applicant_id, position_id=position_id,
private_code=private_code)
applicant = None
applicant_qs = Applicant.objects.filter(user=request.user,
position=expected_applicant.position)
if applicant_qs.count() > 0:
applicant = applicant_qs[0]
else:
applicant = Applicant(user=request.user,
position=expected_applicant.position, status =
APPLICATION_STATUS_INCOMPLETE)
RelativeInlineFormSet = inlineformset_factory(Applicant, Relative,
can_delete=False, extra=1)
PositionHeldInlineFormSet = inlineformset_factory(Applicant,
PositionsHeld, can_delete=False, extra=1)
PhoneInlineFormSet = inlineformset_factory(Applicant, Phone,
can_delete=False, extra=2)
applicant.salutation = expected_applicant.salutation
applicant.suffix = expected_applicant.suffix
applicant.first_name = expected_applicant.first_name
applicant.middle_name = expected_applicant.middle_name
applicant.last_name = expected_applicant.last_name
applicant.state = expected_applicant.state
applicant.city = expected_applicant.city
applicant.save()
form = PersonalInformationForm(instance=applicant)
formset1 = RelativeInlineFormSet(instance=applicant)
formset2 = PositionHeldInlineFormSet(instance=applicant)
formset3 = PhoneInlineFormSet(instance=applicant)
position_title = expected_applicant.position.position_title
complete_name = expected_applicant.get_complete_name()
if request.POST:
form = PersonalInformationForm(request.POST, request.FILES,
instance=applicant)
if form.is_valid():
applicant = form.save(commit=False)
applicant.save()
phone_formset = PhoneInlineFormSet(request.POST,
instance=applicant)
relative_formset = RelativeInlineFormSet(request.POST,
instance=applicant)
position_formset = PositionHeldInlineFormSet(request.POST,
instance=applicant)
if phone_formset.is_valid() and relative_formset.is_valid() and
position_formset.is_valid():
phone_formset.save()
relative_formset.save()
position_formset.save()
context = {
'form': form,
'formset1': formset1,
'formset2': formset2,
'formset3': formset3,
'position_title': position_title,
'complete_name': complete_name,
}
return render_to_response('applications/personal_information.html',
context,
context_instance=RequestContext(request))
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/0146c435-66ee-4c74-8bc3-fad890675bbb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.