Thanks for your response, Matthew, however the problem that I am 
experiencing is with the inline fields not returning an error message. In 
the form.py file, self does not have the inline fields available to return 
an error when performing a check on the value. 

For example: for phone_formset, I need to write an error check that says if 
a phone type is selected, then a phone number must be entered. 

What should the code look like and where should it be included? 


On Tuesday, April 25, 2017 at 3:40:40 PM UTC-4, Matthew Pava wrote:
>
> Try using 
>
>  
>
> self.add_error('state': 'Must select state if province is not entered.')
>
>  
>
> or 
>
> raise ValidationError({'state': 'Must select state if province is not 
> entered.'})
>
>  
>
>  
>
> *From:* [email protected] <javascript:> [mailto:
> [email protected] <javascript:>] *On Behalf Of *Andrew Michael
> *Sent:* Tuesday, April 25, 2017 2:29 PM
> *To:* Django users
> *Subject:* Can't get error to display when using inlineformset_factory.
>
>  
>
> 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] <javascript:>.
> To post to this group, send email to [email protected] 
> <javascript:>.
> 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
>  
> <https://groups.google.com/d/msgid/django-users/0146c435-66ee-4c74-8bc3-fad890675bbb%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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/db038f92-765e-4edd-941e-6f9e4657514a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to