The full_clean method is hijacked to apply special treatment to invalid
        field inputs. For example adding extra options/classes to widgets.

def full_clean(self, *args, **kwargs):
        """
        The full_clean method is hijacked to apply special treatment to invalid
        field inputs. For example adding extra options/classes to widgets.
        """
        super().full_clean(*args, **kwargs)
        for field in self.errors:
            if field != NON_FIELD_ERRORS:
                self.apply_widget_invalid_options(field)