Форма отправляется только при наличии двух дубликатов форм

Я пытаюсь создать сайт на Django, где пользователи могут вводить коды купонов для своих заказов, чтобы получать скидки. Поэтому у меня есть форма в файле cart.html, где пользователь может ввести код купона и получить скидку. Но самое странное, что функция Apply Coupon работает только тогда, когда есть две дублирующие формы друг на друге. Если я удалю хотя бы одну из них и оставлю одну форму, как и должно быть, код не работает, купон не применяется, url страницы застревает на http://127.0.0.1:8000/cart/?csrfmiddlewaretoken=ey3yy96SxX8msYViSD5aiT8TwCwyK5sCRJ9h48TMf3LQeGOmXFl05i2p7gLKta9s&coupon_code=SM20#.

Я понятия не имею, почему он работает только при наличии двух форм и почему он застревает, когда есть только одна форма. Кто-нибудь может мне помочь, пожалуйста? Заранее спасибо!

Мой models.py:

class CartItem(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='cart_items')
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    added_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.user.username} added {self.course.title}"
    

class Coupon(models.Model):
    code = models.CharField(max_length=20, unique=True)
    discount_percentage = models.PositiveIntegerField(null=True, blank=True)
    fixed_discount = models.PositiveIntegerField(null=True, blank=True)
    is_active = models.BooleanField(default=True)
    users_used = models.ManyToManyField(User, related_name='used_coupons', blank=True)

    def __str__(self):
        return self.code

Мой views.py:

@login_required
def apply_coupon(request):
    if request.method == 'POST':
        coupon_code = request.POST.get('coupon_code')
        try:
            coupon = Coupon.objects.get(code__exact=coupon_code, is_active=True)
            if coupon.users_used.filter(id=request.user.id).exists():
                messages.error(request, 'You have already used this coupon code.')
                return redirect('cart')

            cart_items = CartItem.objects.filter(user=request.user)
            total_price = sum(item.course.price for item in cart_items)

            if coupon.discount_percentage:
                discount_amount = total_price * (Decimal(coupon.discount_percentage) / 100)
                discount_amount = int(discount_amount)
            elif coupon.fixed_discount:
                discount_amount = coupon.fixed_discount
            else:
                messages.warning(request, 'Invalid coupon code.')
                return redirect('cart')

            coupon.users_used.add(request.user)
            request.session['coupon_code'] = coupon_code
            request.session['discount_amount'] = discount_amount
            messages.success(request, f'Coupon "{coupon_code}" applied successfully.')
        except Coupon.DoesNotExist:
            messages.warning(request, 'Invalid coupon code.')
    return redirect('cart')



@login_required
def cart(request):
    cart_items = CartItem.objects.filter(user=request.user)
    total_price = sum(cart_item.course.price for cart_item in cart_items)

    # Get discount amount from session if available
    discount_amount = request.session.get('discount_amount', 0)

    if discount_amount == 0:
        final_price = total_price
    else:
        coupon_code = request.session.get('coupon_code')
        try:
            coupon = Coupon.objects.get(code__exact=coupon_code, is_active=True)
            final_price = total_price - discount_amount
        except Coupon.DoesNotExist:
            request.session.pop('coupon_code', None)
            request.session.pop('discount_amount', None)
            final_price = total_price

    context = {
        'cart_items': cart_items,
        'total_price': total_price,
        'discount_amount': discount_amount,
        'final_price': final_price,
    }
    return render(request, 'checkout/cart.html', context)

Моя корзина.html:

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