def clean(self): user_fields = ('email', 'password', 'confirm_password') user_data = {f: self.cleaned_data.pop(f) for f in user_fields} try: validate_password(user_data['password']) except ValidationError as e: self.add_error('password', e) confirm_password = user_data.pop('confirm_password') if user_data['password'] != confirm_password: self.add_error( 'confirm_password', ValidationError(_("The two password fields didn't match."), 'password_mismatch') ) user = User(email=user_data['email']) try: user.validate_unique() except ValidationError as e: for field, er in e.error_dict.items(): self.add_error(field, er) return {'user': user_data, **self.cleaned_data}