2017-05-19 16 views
0

私は関連名を持つユーザーでログインして電流から、送信者名をしている達成しようとしていますので、同様に受信機の受信トレイに表示しますDjango - 電子メールに送信者名を追加するには?

'associaton-name'@domain.com

私は日と仕事の時間後に関連するすべてのソリューションを見つけることができないようviews.py

でそれを達成しようとした場合について、それを下にコメントしています。

本当にありがとうございます。

ジャンゴ:1.10
のPython: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

私は私はあなたを理解していません質問訂正y。 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

私はまだ問題がどこにあるのか見当たりません - なぜあなたは 'self.request.user'でDjangoのORMクエリを使用できませんか? – Risadinha

+0

'form.is_valid()'のオプション2はほとんど機能していますが、このエラーが発生しています:** dortmundから[email protected]にメッセージを送信 ... Mailgun APIレスポンス400: { "message ":" from 'パラメータは有効なアドレスではありません。ドキュメント " を確認してください。**私は**@domain.com**が必要です – Niknak

関連する問題