Как предотвратить скрытие Modal при отправке, если в форме есть ошибка?
когда я нажимаю кнопку Добавить пользователя, модальная форма скрывается, даже если в форме есть ошибки. Если я снова открываю модальную форму, сообщения об ошибках остаются там, мне нужно показать сообщения об ошибках и не закрывать модальную форму, если есть сообщение об ошибке.
Я думаю, что могу использовать {{form.errors}}
для проверки наличия сообщения об ошибке. Но я не знаю как?
<div class="card-body d-flex justify-content-between">
<h4 class="box-title">Users</h4>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#add_user" data-whatever="" >Add a user</button>
<div class="modal fade" id="add_user" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h1 class="h3 mb-3 fw-normal text-center" id="exampleModalLabel">Create Account</h1>
</div>
<div class="modal-body">
<form action="" method="POST">
{% csrf_token %}
<div class="form-floating">
{{ form.username }}
<span class="text-danger">{{ form.errors.username }}</span>
</div>
<div class="form-floating">
{{ form.email }}
<span class="text-danger">{{ form.errors.email }}</span>
</div>
<div class="form-floating">
{{ form.password1 }}
<span class="text-danger">{{ form.errors.password1 }}</span>
</div>
<div class="form-floating">
{{ form.password2 }}
<span class="text-danger ">{{ form.errors.password2 }}</span>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button class=" btn btn-primary" type="submit" >Add User</button>
</div>
</div>
</form>
</div>
</div>
</div>
Я использовал форму Django для валидации и сообщений об ошибках.
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username','class': 'form-control mb-3',}))
email = forms.CharField(widget=forms.EmailInput(attrs={'placeholder': 'Email','class': 'form-control mb-3',}))
password1 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password','class': 'form-control mb-3',}))
password2 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Confirm Password','class': 'form-control mb-3',}))
моя функция в файле views.py выглядит следующим образом
@login_required(login_url= 'login')
@staff_member_required(login_url='home')
def dashboard(request):
User = get_user_model()
users = User.objects.all()
form = CustomUserCreationForm()
if request.method == 'POST':
form = CustomUserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('dashboard')
context = {
'users' : users,
'form': form
}
return render(request, 'dashboard.html', context)
есть ли какие-либо решения для этого?
Самый простой способ сделать это - добавить оператор if в класс модального div:
<div class="modal fade {% if form.errors %}show{% endif %}" ...>