Reputation: 7330
here with this code the form errors are not displaying properly.The all error messages says, this field is required only.how can i define my custom form.error message in the template.
Template:
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<p> {{ error }} </p>
{% endfor %}
{% endfor %}
{% endif %}
<div class="form-group">
<h5>Full Name <span class="text-danger">*</span></h5>
<div class="controls">
<input type="text" name="name" class="form-control" title="Full Name is required" > </div>
</div>
<div class="form-group">
<h5>Courses<span class="text-danger">*</span></h5>
<div class="controls">
{% for course in courses %}
<input name ="courses" type="checkbox" id="course-{{course.id}}" value="{{course.id}}" autofocus title="Please Check at least one course">
<label for="course-{{course.id}}">{{course.title}}</label>
{% endfor %}
</div>
</div>
views.py
:
if request.method == 'POST':
form = AddStudentForm(request.POST, request.FILES)
if form.is_valid():
student = form.save(commit=True)
student.save()
messages.success(request, 'student with name {} added.'.format(student.name))
return redirect('admin:add_student')
else:
form = AddStudentForm()
return render(request, 'admin/add_student.html', {'form': form})
Upvotes: 8
Views: 26469
Reputation: 56
You can use Django messages framework to achieve this.
In Your views.py
file first import messages
from django.contrib import messages
then do something like this
if request.method == 'POST':
form = AddStudentForm(request.POST, request.FILES)
if form.is_valid():
student = form.save(commit=True)
student.save()
messages.success(request, 'student with name {} added.'.format(student.name))
return redirect('admin:add_student')
else:
for error in form.errors:
messages.error(request, sign_in_form.errors[error])
return redirect(request.path)
else:
form = AddStudentForm()
return render(request, 'admin/add_student.html', {'form': form})
In your HTML File, access messages something like
{% if message.tags == 'error' %}
<!-- bootstrap alert -->
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<strong>{{ message }}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endif %}
{% if message.tags == 'success' %}
<!-- bootstrap alert -->
<div class="alert alert-success alert-dismissible fade show" role="alert">
<strong>{{ message }}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endif %}
{% endfor %}
Upvotes: 3
Reputation: 996
in your views.py
pass the form with errors like this
if request.method == 'POST':
form = AddStudentForm(request.POST, request.FILES)
if form.is_valid():
student = form.save(commit=True)
student.save()
messages.success(request, 'student with name {} added.'.format(student.name))
return redirect('admin:add_student')
return render(request, 'admin/add_student.html', {'form': form})
else:
form = AddStudentForm()
return render(request, 'admin/add_student.html', {'form': form})
That means you should remove the else part and in your template code
{% if form.errors %}
<div class="alert alert-danger">
{{ form.errors }}
</div>
{% endif %}
Updated the answer to get proper answer when you load the view first time
Upvotes: 19