Как сделать так, чтобы значение поля формы django не обновлялось, если поле не подтверждено и пользователь нажимает submit

Я создал шаблон HTMl формы регистрации, и разработал его таким образом, что если есть какая-либо ошибка валидации, он выводит ошибку, и это работает нормально. Форма регистрации показывает ошибку "пароли не совпадают" Проблема, с которой я сталкиваюсь, заключается в том, что все поля формы очищаются, как только я нажимаю кнопку submit и появляются ошибки, то есть если пользователь получил ошибку "пароли не совпадают", то ему пришлось бы вводить все свои данные с нуля. Я хочу, чтобы пользователь вводил только те поля, в которых есть ошибки.

HTML-форма регистрации

` {% csrf_token %}

views.py для формы регистрации

def register_view(request):
form = CustomUserCreationForm()

if request.method == 'POST':
    form = CustomUserCreationForm(request.POST)
    if form.is_valid():
        user = form.save()
        login(request, user)
        messages.success(request, f'{user.first_name}, your account has been created succesfully')
        return redirect('home')
    else:
        messages.error(request, form.errors)
return render(request, 'base/register.html', {'form' : form })

Модель формы реестра

from django.contrib.auth.forms import UserCreationForm, UserChangeForm

from .models import UserModel из django import forms

class CustomUserCreationForm(UserCreationForm):

first_name = forms.CharField(
    label='',
    widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Firstname'})
)

last_name = forms.CharField(
label='',
widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Lastname'})
)

email = forms.CharField(
    label='',
    widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Email'})
)

password1 = forms.CharField(
    label='',
    widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder':'Enter Password'})
)

password2 = forms.CharField(
    label='',
    widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder':'Enter Password again'})
)

    
class Meta:
    model = UserModel
    fields = ('email','first_name','last_name')

class CustomUserChangeForm(UserChangeForm):

class Meta:
    model = UserModel
    fields = ('email','first_name','last_name')

Я исправил эту проблему, проблема в том, что я отображал поля формы с помощью тега <Input....> вместо того, чтобы отображать их с помощью тегов Jinja, т.е. {{form.field}}

==== models.py ====

class EmployeeModel(models.Model):
    name = models.CharField(max_length=255)
    email = models.EmailField()

    def __str__(self):
        return self.name

==== forms.py ====

class EmployeeForm(forms.ModelForm):
    class Meta:
        model = EmployeeModel
        fields = "__all__"
        widgets = {

            'name':forms.TextInput(attrs={'placeholder':'Enter Employee Name'}),
            'email':forms.EmailInput(attrs={'placeholder':'Enter Employee E-Mail'}),
        }

==== views.py ====

def EmployeeView(request):
  if request.method == "POST":
    form = EmployeeForm(request.POST)
    if form.is_valid():
      print("======= form is validated ============")
      form.save()
      messages.info(request,'Employee Added')
      return redirect("/")
    else:
      print("======= form is not validated ============")
      context= {'form':form}
      return render(request,'index.html',context)
  else:
    form = EmployeeForm()
  context= {'form':form}
  return render(request,'index.html',context)

==== html код =====

{% block body %}
     <div>
          {% if messages %}
          {% for msg in messages %}
               {{msg}}
          {% endfor %}
          {% endif %}
     </div> 
     <br>

     <form action="" method="POST" novalidate >
          {% csrf_token %}
          
          <p>{{form.name.label}}:{{form.name}} {{form.name.errors|striptags}} </p>
          <p>{{form.email.label}}:{{form.email}} {{form.email.errors|striptags}} </p>
               
          <p><button type="submit">Add</button></p>
          
     </form>

     

{% endblock body %}

===== выход ========

enter image description here

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