2017-05-19 10 views
0

내가 협회 이름으로 현재 로그인 한 사용자에서 보낸 사람의 이름을 가지고있다 달성하기 위해 노력하고,과 같이 수신기의받은 편지함에 표시합니다 :Django - 보낸 사람 이름을 전자 메일에 추가하는 방법?

'associaton-name'@domain.com

내가 일 작업 시간 후에 관련된 모든 솔루션을 찾을 수 없습니다 views.py

그것을 달성하기 위해 노력하는 곳 바로 아래 아래로 댓글을 달았.

여러분의 도움에 진심으로 감사드립니다.

장고 : 1.10
파이썬 : 3.6


views.py

class mailPost(FormView): 
    success_url = '.' 
    form_class = mailHandler 
    template_name = 'post/post.html' 

    def form_valid(self, form): 
     messages.add_message(self.request, messages.SUCCESS, 'Email Sent!') 
     return super(mailPost, self).form_valid(form) 

    def form_invalid(self, form): 
     messages.add_message(self.request, messages.WARNING, 
         'Email not sent. Please try again.') 
     return super(mailPost, self).form_invalid(form) 

    def post(self, request, *args, **kwargs): 
     form_class = self.get_form_class() 
     form = self.get_form(form_class) 

     if form.is_valid(): 
      sender = "[email protected]"  # Instead of noreply I wish for current requested associaton name 
      receiver = form.cleaned_data.get('receiver') 
      cc = form.cleaned_data.get('cc') 
      bcc = form.cleaned_data.get('bcc') 
      subject = form.cleaned_data.get('subject') 
      message = form.cleaned_data.get('message') 
      time = datetime.now() 
      asoc_pk = Association.objects.filter(asoc_name=self.request.user.association) 
      asoc = Association.objects.get(id=asoc_pk) 

      Email.objects.create(
       sender=sender, 
       receiver=receiver, 
       cc=cc, 
       bcc=bcc, 
       subject=subject, 
       message=message, 
       association=asoc, 
       sentTime=time 
      ) 

      msg = EmailMultiAlternatives(subject, message, sender, [receiver], bcc=[bcc], cc=[cc]) 
      msg.send() 

      return self.form_valid(form) 
     else: 
      return self.form_invalid(form) 

models.py

class Email(models.Model): 
    sender = models.CharField(max_length=254) 
    sentTime = models.DateTimeField(auto_now_add=True, blank=False) 
    subject = models.CharField(max_length=254) 
    receiver = models.CharField(max_length=254) 
    cc = models.CharField(max_length=254) 
    bcc = models.CharField(max_length=254) 
    message = models.TextField() 
    association = models.ForeignKey(Association) 

    class Meta: 
     db_table = 'Email'  


class Association(models.Model): 
    asoc_name = models.CharField(max_length=50, null=True, blank=True, unique=True) 


    class Meta: 
     db_table = 'Association'  


class Administrator(AbstractUser): 
    ... 
    association = models.ForeignKey(Association) 


    class Meta: 
     db_table = 'Administrator' 
+0

연관 currentuser 이름과의 관계는 무엇인가? – haifzhan

+0

@HaifengZhang - 죄송합니다. 'User' 모델을 추가하는 것을 잊었습니다. 이제 위에 표시됩니다. – Niknak

답변

0

난 이해가 확실하지 않다 당신의 질문 correctl 와이. self.request.user을 호출하여 인증 된 사용자 (Django 인증 시스템을 사용하는 경우)에 액세스 할 수 있습니다. 당신은 얻을

# Option 2 
class Membership(Model): 
    association = models.ForeignKey(Association) 
    user = models.ForeignKey(User, unique=True) 

: 사용자가 단지 하나 개의 협회의 구성원이 될 수있는 경우

class Association(models.Model): 
    asoc_name = models.CharField(max_length=50, null=True, blank=True, unique=True) 
    # Option 1 - if one user can be a member of several associations 
    members = models.ManyToMany(User) 

    class Meta: 
     db_table = 'Association' 

하거나 새 모델 인스턴스 :

당신은 Association와 사용자 사이의 관계를 만들어야합니다 직접 조회 (또는 역 관계)를 사용하는 연관.

# option 1 
if form.is_valid(): 
     sender = Association.objects.filter(members=self.request.user).first() 
     # sender might be None 

# option 2 
if form.is_valid(): 
     membership = Membership.objects.filter(user=self.request.user).first() 
     if membership: 
      sender = membership.association 

https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/

+0

나는 협회의 회원 인 현재 사용자를 가져오고 해당 협회의 이름을 잡고 발신자 이메일의 일부로 전달하기 만하면됩니다. ** [email protected]** 여기서 dortmund는 연관 이름입니다 – Niknak

+0

문제가있는 곳을 계속 볼 수 없습니다 - 왜 당신은 장고의 ORM 쿼리를'self.request.user'와 함께 사용할 수 없습니까? – Risadinha

+0

'form.is_valid()'옵션 2가 거의 작동하지만이 오류가 계속 발생합니다. ** dortmund에서 [email protected]으로 메시지 보내기 ... Mailgun API 응답 400 : { "message ":" 'from'매개 변수가 유효한 주소가 아닙니다. 문서 " "을 확인하십시오 ** ** ** 도메인 만 있으면 ** 일일이 필요합니다. – Niknak