Django sends post request when I refresh page

27 views Asked by At

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.

0

There are 0 answers