Почему форма django публикуется с ошибками при обновлении экземпляра

У меня есть стандартная форма обновления пользователя вида

@login_required()
def personal(request):

    if request.method == 'POST':
        user_form = UserForm(request.POST, instance=request.user)
        if user_form.is_valid():
            user = user_form.save()

            update_session_auth_hash(request, user)
            messages.success(request, 'Your personal data has been changed successfully!')

            return redirect('profile')
    else:
        user_form = UserForm(instance=request.user)

    context = {
        'form': user_form,
    }

    return render(request, 'personal.html', context)

Проблема здесь в строке user_form.is_valid(). Она запускает логику валидации, которая собирает ошибку, если имя пользователя уже занято другим пользователем. В данном случае мы имеем ValidationError, но instance в этой форме все равно обновляется из-за кода в логике функции django construct_instance:

def construct_instance(form, instance, fields=None, exclude=None):
    """
    Construct and return a model instance from the bound ``form``'s
    ``cleaned_data``, but do not save the returned instance to the database.
    """
    ...
    f.save_form_data(instance, cleaned_data[f.name])
    ...

Я нахожу такое поведение очень странным. Как я могу избежать обновления полей экземпляра пользователя неверными значениями, если мне нужно, скажем, отобразить имя пользователя в верхней части страницы?

Вернуться на верх