Django: запретить сброс формы, если форма недействительна

Я пытаюсь предотвратить сброс формы, когда есть недопустимый ввод, но когда есть недопустимый ввод, вся моя форма сбрасывается, и я не понимаю, почему. Это в основном регистрационная форма, и смысл в том, чтобы форма не сбрасывалась, когда form.is_valid() имеет значение false. Также, если бы вы могли помочь с отображением сообщений. Как включить панель надежного пароля под полем пароля.

 <center><div class= 'form-container'>
            <h1 style = "font-weight:normal;font-family: 'Google Sans','Noto Sans Myanmar UI',arial,sans-serif;position: relative;top: 20px;">Sign-up</h1>
            <form method = "post" id = "register-inputs" action = {% url 'register' %}>
                {% csrf_token %}
                <div>
                    <div class = "user-register">
                      <input type = 'text' name = 'first_name' required>
                      <span class = "highlight"></span>
                      <span class = "bar"></span>
                      <label>First name</label>
                    </div>
                    <div class = "user-register">
                      <input type = 'text' name = 'last_name' required>
                      <span class = "highlight"></span>
                      <span class = "bar"></span>
                      <label>Last name</label>
                    </div>
                    <div class = "user-register">
                      <input type = 'text' name = 'email' required>
                      <span class = "highlight"></span>
                      <span class = "bar"></span>
                      <label>Email</label>
                    </div>
                    <div class = "user-register">
                      <input type = 'text' name = 'username' required>
                      <span class = "highlight"></span>
                      <span class = "bar"></span>
                      <label>Username</label>
                    </div>
                    <div class = "user-register">
                      <input  type = 'password' name = "password1" required>
                      <span class = "highlight"></span>
                      <span class = "bar"></span>
                      <label>Password</label>
                    </div>
                    <div class = "user-register">
                      <input  type = 'password' name = "password2" required>
                      <span class = "highlight"></span>
                      <span class = "bar"></span>
                      <label>Confirm Password</label>
                    </div>
                    <input class = "btn btn-primary" type = "submit" value = "Sign up!">
                    <div class = "social-media-btns">
                        <div class = "or-login"></div>
                        <div class = "social-icons">
                            <a href = "https://www.instagram.com" target = "_blank" class = "social-icon social-icon--instagram">
                                <i class = "fa fa-instagram"><img width = "40" style = "display: flex; justify-content:center" src = "{% static 'social_media_btn/instagram-icon.png' %}"></i>
                                <div class = "tooltip">Instagram</div>
                            </a>
                            <a target = "_blank" href = "https://www.facebook.com" class = "social-icon social-icon--facebook">
                                <i class = "fa fa-facebook">
                                    <img width = "15" style = "display: flex; justify-content:center" src = "{% static 'social_media_btn/facebook-icon.png' %}">
                                </i>
                                <div class = "tooltip">Facebook</div>
                            </a>
                            <a target = "_blank" href = "https://www.google.com" class = "social-icon social-icon--google">
                                <i class = "fa fa-google">
                                    <img width = "40" style = "display: flex; justify-content:center" src = "{% static 'social_media_btn/google-icon.png' %}">
                                </i>
                                <div class = "tooltip">Google</div>
                            </a>
                        </div>
                    </div>
                    <br>
                    <p>Already have an account? <span><a href = "{% url 'login' %}">Login!</a></span>
                    </p>
    
                </div>
            </form>
        </div></center>

просмотры.py

def register(request):
    form = RegistrationForm()
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            user = form.save()
            user.refresh_from_db()
            user.profile.first_name = form.cleaned_data.get('first_name')
            user.profile.last_name = form.cleaned_data.get('last_name')
            user.profile.email = form.cleaned_data.get('email')
            user.save()
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=password)
            login(request, user)
            return redirect('register')

    else:
        form = RegistrationForm()

    context = {'form': form}
    return render(request, 'register.html', context)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
612
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете видеть значения, когда форма недействительна, потому что у вас есть пользовательская HTML-форма (не визуализированная Django), а атрибуты значений не привязаны к полям формы. Итак, сделайте следующее:

<div class = "user-register">
    {{ form.first_name }}
    <span class = "highlight"></span>
    <span class = "bar"></span>
    <label>First name</label>
</div>

ИЛИ

<div class = "user-register">
    <input type = 'text' name = 'first_name' required value = "{{ form.first_name.value }}">
    <span class = "highlight"></span>
    <span class = "bar"></span>
    <label>First name</label>
</div>

Но лично я рекомендую первую.

ОБНОВЛЯТЬ Чтобы стилизовать поля в Django, используйте виджеты. Так, например, для поля first_name сделайте следующее:

forms.py


class MyForm(forms.Form):
    first_name = forms.CharField(
        widget=forms.TextInput(
            attrs = {"class": "custom-css-classes go-here"}
        )
    )
...

как мне стилизовать {{ form.first_name }}?

user14374473 25.12.2020 17:17

проверьте обновленный ответ. Не забудьте отметить его как принятый, если он сработал для вас!

Redgren Grumbholdt 25.12.2020 17:20

@kixsmart Пожалуйста, прочтите документацию.

user1600649 25.12.2020 17:20

Другие вопросы по теме