lundi 20 juin 2016

How to make only specific user getting a newsletter-mail (Django)

I am trying to implement a newsletter and added a choice field to my UserProfile class, to let users select if they want to get an newsletter or not:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    YES = 'YS'
    NO = 'NO'
    NEWS_CHOICES = (
        (YES, 'Yes'),
        (NO, 'No'),
    )
    newsletter = models.CharField(max_length=2, choices= NEWS_CHOICES, default=NO) 

And I made this view to send a newsletter to the users, which want to get a newsletter (selected 'Yes'):

@user_passes_test(lambda u: u.is_superuser) 
def newsletter_form(request):
    if request.method == 'POST':
        form = NewsletterForm(request.POST or None, request.FILES or None)
        if form.is_valid():
            reader = UserProfile.objects.filter(newsletter='YS')
            instance = form.save(commit=False)
            instance.save()
            subject = 'This is the Newsletter!'
            message = 'Hello!'
            from_email = settings.EMAIL_HOST_USER
            to_list = [reader.user.email]
            html_message = loader.render_to_string('gaestebuch/newsletter.html')
            send_mail(subject, message, from_email, to_list, fail_silently = True, html_message=html_message)
            return redirect('gaestebuch:index')
        else:
            print form.errors
    else:
        form = NewsletterForm()
    context = {'form': form}
    return render(request, 'gaestebuch/newsletter_form.html', context)

I am struggeling with :

to_list = [reader.user.email]

The error I am getting is:

'QuerySet' object has no attribute 'user'

I would be glad if someone could help me at this point :)

Aucun commentaire:

Enregistrer un commentaire