Я создал новый информационный бюллетень для отправки электронных писем при статусе «Опубликован», но я продолжаю получать его после сохранения, хотя предполагается, что информационный бюллетень будет отправлен по электронной почте.
от администратора Django он сохраняется без отправки электронного письма но из ссылки на панель управления, которой я управляю информационным бюллетенем, я получаю эту ошибку после сохранения
TypeError at /control/newsletter/
object of type 'NewsletterUser' has no len()
Из-за этой ошибки, вероятно, я не получаю электронные письма
Я не знаю, что такое причина этой ошибки и как ее исправить, я выбрал адрес электронной почты, но все же
Вот models.py:
class Newsletter(models.Model):
EMAIL_STATUS_CHOICES = (
('Draft', 'Draft'),
('Published', 'Published')
)
subject = models.CharField(max_length=250)
body = models.TextField()
email = models.ManyToManyField(NewsletterUser)
status = models.CharField(max_length=10, choices=EMAIL_STATUS_CHOICES)
created = models.DateTimeField(default=timezone.now)
updated = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.subject
Вот views.py
def control_newsletter(request):
form = NewsletterCreationForm(request.POST or None)
if form.is_valid():
instance = form.save()
newsletter = Newsletter.objects.get(id=instance.id)
if newsletter.status == "Published":
subject = newsletter.subject
body = newsletter.body
from_email = settings.EMAIL_HOST_USER
for email in newsletter.email.all():
send_mail(subject=subject, from_email=from_email, recipient_list=[
email], message=body, fail_silently=False)
context = {
"form": form,
}
template = 'control_newsletter.html'
return render(request, template, context)
def control_newsletter_list(request):
newsletter = Newsletter.objects.all()
paginator = Paginator(newsletter, 10)
page = request.GET.get('page')
try:
items = paginator.page(page)
except PageNotAnInteger:
items = paginator.page(1)
except EmptyPage:
items = paginator.page(paginator.num_pages)
index = items.number - 1
max_index = len(paginator.page_range)
start_index = index - 5 if index >= 5 else 0
end_index = index + 5 if index <= max_index - 5 else max_index
page_range = paginator.page_range[start_index:end_index]
context = {
"items": items,
"page_range": page_range
}
template = "control_newsletter_list.html"
return render(request, template, context)
def control_newsletter_detail(request, pk):
newsletter = get_object_or_404(Newsletter, pk=pk)
context = {
"newsletter": newsletter,
}
template = "control_newsletter_detail.html"
return render(request, template, context)
def control_newsletter_edit(request, pk):
newsletter = get_object_or_404(Newsletter, pk=pk)
if request.method == 'POST':
form = NewsletterCreationForm(request.POST, instance=newsletter)
if form.is_valid():
newsletter = form.save()
if newsletter.status == "Published":
subject = newsletter.subject
body = newsletter.body
from_email = settings.EMAIL_HOST_USER
for email in newsletter.email.all():
send_mail(subject=subject, from_email=from_email, recipient_list=[
email], message=body, fail_silently=False)
return redirect('control_panel:control_newsletter_detail', pk=newsletter.pk)
else:
form = NewsletterCreationForm(instance=newsletter)
context = {
"form": form,
}
template = 'control_newsletter.html'
return render(request, template, context)
def control_newsletter_delete(request, pk):
newsletter = get_object_or_404(Newsletter, pk=pk)
if request.method == 'POST':
form = NewsletterCreationForm(request.POST, instance=newsletter)
if form.is_valid():
newsletter.delete()
return redirect('control_panel:control_newsletter_list')
else:
form = NewsletterCreationForm(instance=newsletter)
context = {
"form": form,
}
template = 'control_newsletter_delete.html'
return render(request, template, context)
вот urls.py
from newsletters.views import control_newsletter, control_newsletter_list, control_newsletter_detail, control_newsletter_edit, control_newsletter_delete
app_name = 'newsletters'
urlpatterns = [
path('newsletter/', control_newsletter, name="control_newsletter"),