2016-06-18 21 views
0

我正在嘗試實施簡報並向UserProfile類添加選擇字段,以便用戶選擇是否要獲取簡報:如何僅使特定用戶獲得簡報郵件(Django)

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) 

而且我提出這個觀點的簡訊發送給用戶的,希望得到一個通訊(選擇「是」):

@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) 

我與struggeling:

to_list = [reader.user.email] 

我得到的錯誤是:

'QuerySet' object has no attribute 'user' 

我會很高興,如果有人可以幫助我在這一點:)

回答

1

由於錯誤指示,reader,是一個QuerySet,但你似乎將其視爲UserProfile的單個實例。這應該工作到所有收件人添加到列表:

to_list = [r.user.email for r in reader] 

做筆記,不過following part of the documentation(重點煤礦):

recipient_list:字符串列表,每一個電子郵件地址。 recipient_list的每個成員都將在電子郵件的「收件人:」字段中看到其他收件人。

如果你不想讓所有收件人看到對方,那麼你將需要爲每個收件人分別發送消息。

+0

非常感謝您的幫助! – Dannad

相關問題