Удаление значения из базы данных на основе данных, отправленных из формы - 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, поэтому упростите и удалите его, возможно, ваша система заработает.