Удаление значения из базы данных на основе данных, отправленных из формы - Django

Я пытаюсь реализовать рассылку новостей/подписку на электронную почту для своего проекта. Я создал модель, которая хранит только email и метку времени, и использует SendGrid для отправки писем пользователям, которые подписались.

Я хочу включить кнопку отказа от подписки в электронные письма, которые я отправляю. Когда пользователь нажимает на ссылку "Отписаться" в письме, она добавляет id значение в db к url и перенаправляет на cancelsub.html, где я получаю доступ к ней.

В cancelsub.html У меня есть форма с кнопкой submit, которая при нажатии пользователем должна удалять значение из базы данных. По какой-то причине это не работает.

Models.py--

class NewsletterUser(models.Model):
    email = models.EmailField(null=True)
    date_added =  models.DateTimeField(default=datetime.now)


    def __str__(self):
        return self.email

Views.py--

def NewsLetter(request):
    if request.method == 'POST':
        email_input = request.POST.get('email_value')
        new = NewsletterUser(email=email_input)
        new.save()
        sendEmail(email_input)
   return render(request,"pages/index.html")

def DeleteNewsLetter(request):
    if request.method == 'POST':
        del_id = request.POST.get('id_value')
        NewsletterUser.objects.filter(id= del_id).delete()
    return render(request, "newsletter/CancelSubscription.html")

cancelsub.html--

<form id="cancel-subscription-form" method="POST">
  {% csrf_token %}
  <div class="email-and-btn">
  <button class="btn btn-danger mb-2 art-digest-btn" id="cancel-btn" type="submit" value="">Yes, Cancel It</button>
  </div>   
</form>

<script src="https://code.jquery.com/jquery-1.9.1.js"></script>
        
<script>
  var current_url = window.location.href
  var id = current_url.split('?')[1]
  id_int = parseInt(id)
  $("#cancel-btn").val(id_int);

  $(document).on('submit','#cancel-subscription-form',function(e){
    e.preventDefault();
    $.ajax({
                type:'POST',
                url:'{% url "DeleteNewsLetter" %}',
                data:
                {
                    id_value: parseInt($("#cancel-btn").val()),
                    csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),
                },
                success:function(){
            
                }
                })
            });
        </script>
    </div>

Было бы очень полезно, если бы кто-нибудь подсказал мне, где я ошибся! Заранее спасибо!!!

Я понимаю, что URL, который вы отправляете по электронной почте, выглядит примерно так: http://mywebsite.com/unsubscribe/?9

Таким образом, вы получите "9" с помощью кода javascript. Вам не нужен javascript, если вы дадите имя своему значению, как это сделано здесь: http://mywebsite.com/unsubscribe/?user_id=9

Теперь можно поступить следующим образом:

<form id="cancel-subscription-form" method="POST" action="{% url "DeleteNewsLetter" %}">
    {% csrf_token %}
    <div class="email-and-btn">
        <button name="id_value" class="btn btn-danger mb-2 art-digest-btn" id="cancel-btn" type="submit" value="{{request.GET.user_id}}">Yes, Cancel It</button>
    </div>   
</form>

Я думаю, что ваша проблема в коде javascript, поэтому упростите и удалите его, возможно, ваша система заработает.

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