def full_clean(self):
        """
        Cleans all of self.data and populates self._errors.
        """
        self._errors = []
        if not self.is_bound: # Stop further processing.
            return
        for i in range(0, self._total_form_count):
            form = self.forms[i]
            self._errors.append(form.errors)
        # Give self.clean() a chance to do cross-form validation.
        try:
            self.clean()
        except __HOLE__, e:
            self._non_form_errors = e.messages
dataset/ETHPy150Open dcramer/django-compositepks/django/forms/formsets.py/BaseFormSet.full_clean