Почему мой вид не удаляет выделенный объект? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь создать форму, чтобы отписаться от подписчиков на новостную рассылку, но я точно не знаю, где я ошибаюсь. Все шаги, на мой взгляд, работают в командной строке, поэтому мне сложно их отлаживать. Когда я отправляю форму на существующий адрес электронной почты, появляется ошибка «Подписчик с таким адресом электронной почты уже существует», но я пытаюсь удалить объект, а не создать его, и я немного застрял. Любая помощь очень ценится!

Мой вид:

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>

1 Ответ

0 голосов
/ 29 апреля 2020

Я наконец-то получил рабочее представление для страницы отписки. Не очень отличается от ранее, но разница была в модели, где я удалил уникальное ограничение из поля электронной почты.

from django.db import models

# Create your models here.
class Subscriber(models.Model):
    email = models.EmailField(max_length=75,)
    def __str__(self):
        return self.email
...