Я пытаюсь создать форму, чтобы отписаться от подписчиков на новостную рассылку, но я точно не знаю, где я ошибаюсь. Все шаги, на мой взгляд, работают в командной строке, поэтому мне сложно их отлаживать. Когда я отправляю форму на существующий адрес электронной почты, появляется ошибка «Подписчик с таким адресом электронной почты уже существует», но я пытаюсь удалить объект, а не создать его, и я немного застрял. Любая помощь очень ценится!
Мой вид:
from subscribe.forms import SubscribeForm, UnsubscribeForm
from django.shortcuts import render, HttpResponseRedirect
from django.contrib import messages
from .models import Subscriber
from django.shortcuts import get_object_or_404
def unsubscribe(request):
if request.method == 'POST':
form = UnsubscribeForm(request.POST)
if form.is_valid():
email = form.cleaned_data['email']
user = get_object_or_404(Subscriber,email=email)
user.delete(id=user.id)
messages.success(request, 'Unsubscribed')
return HttpResponseRedirect('/newsletter/subscribe/')
else:
messages.error(request, form.errors)
return render(request, 'unsubscribe.html', {'form': form})
else:
form = UnsubscribeForm()
return render(request, 'unsubscribe.html', {'form': form})
Мои формы:
from django.forms import ModelForm, EmailField
from .models import Subscriber
class SubscribeForm(ModelForm):
email = EmailField()
class Meta:
model = Subscriber
fields = ('email',)
class UnsubscribeForm(ModelForm):
email = EmailField()
class Meta:
model = Subscriber
fields = ('email',)
Моя модель:
from django.db import models
# Create your models here.
class Subscriber(models.Model):
email = models.EmailField(max_length=75, unique=True)
def __str__(self):
return self.email
Мой шаблон :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">UnSubscribe</button>
</form>
</body>
</html>