In my model I have a class called "Class". Each student in my online school can enroll in a class, so I have a "Enrollment" model:
class Enrollment(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
class_name = models.ForeignKey(Class, on_delete=models.CASCADE)
date = models.DateField(auto_now_add=True, blank=True)
active = models.BooleanField(default=True)
accepted = models.BooleanField(default=False)
and I have a class-detail view which student can enroll in classes using that:
def class_detail(request, pk, slug):
class_name = get_object_or_404(Class, pk=pk, slug=slug)
try:
student = Student.objects.get(student_id=request.user.id)
except Student.DoesNotExist:
student = Student.objects.create(student=request.user)
enrolled = None
accepted = None
try:
if Enrollment.objects.get(class_name=class_name, student=student, active=True):
enrolled = True
except Enrollment.DoesNotExist:
enrolled = None
try:
if Enrollment.objects.get(class_name=class_name, student=student, active=True, accepted=True):
accepted = True
except Enrollment.DoesNotExist:
accepted = None
if request.method == 'POST':
if not enrolled:
form = EnrollmentForm(request.POST)
if form.is_valid():
enrollment = form.save(commit=False)
enrollment.student = student
enrollment.class_name = class_name
enrollment.save()
else:
form = EnrollmentForm()
else:
form = EnrollmentForm()
context = {'class': class_name, 'enrolled': enrolled,
'accepted': accepted, 'form': form, 'student': student}
# context = {'class': class_name, 'student': student}
return render(request, 'school/class-detail.html', context)
and this is my template:
{{ class.title}}
{% if accepted %}
<p><a href="{{ class.class_link }}">Enter</a></p>
{% elif enrolled %}
<p>You have successfully enrolled.</p>
{% else %}
<form class="" action="" method="post">
{% csrf_token %}
{{ form }}
<input class="btn btn--secondary" type="submit" value="Enroll">
</form>
{% endif %}
It works well but whenever I refresh the page it sends a post request and enroll in the class.