0

基本的にはジョブチケットのモデルフォームを持っています。ビューのsaveメソッドは、保存時に電子メール通知を送信するように設定されています。モデルには、親UserProfileモデルから継承するいくつかのフィールドがあります。

class RemoteRequest(models.Model):
    create_date = models.DateTimeField(auto_now_add=True)
    requested_by = models.ForeignKey(UserProfile)
    client = models.CharField(max_length=50, choices=CLIENT_CHOICES)
    job_number = models.CharField(max_length=8, unique=False, blank=False, null=False)
    cell_number = models.CharField(max_length=4, unique=False, blank=True, null=True)
    job_name = models.CharField(max_length=200, unique=False, blank=True, null=True)
    print_request = models.ManyToManyField(PrintRequest, unique=False, blank=True, null=True)
    interactive_request = models.ManyToManyField(InteractiveRequest, unique=False, blank=True, null=True)
    due_date = models.DateTimeField(auto_now_add=False)
    job_notes = models.TextField(max_length=500, unique=False, blank=True, null=True)
    asset_location = models.CharField(max_length=300, unique=False, blank=True, null=True)
    asset_upload = models.FileField(upload_to=request_file_name, blank=True, null=True, max_length=300)
    pdf_upload = models.FileField(upload_to=request_file_name, blank=True, null=True, max_length=300)
    *notify_internal = models.ManyToManyField(UserProfile, related_name='+', unique=False, blank=True, null=True)*
    notify_external = models.ManyToManyField(FreelanceProfile, unique=False, blank=True, null=True)
    completed_by = models.ForeignKey(UserProfile, related_name='+', blank=True, null=True)
    complete_date = models.DateTimeField(auto_now_add=False, blank=True)
    asset_return = models.FileField(upload_to=return_file_name, blank=True, null=True, max_length=300)
    pdf_return = models.FileField(upload_to=return_file_name, blank=True, null=True, max_length=300)
    return_notes = models.TextField(max_length=500, unique=False, blank=True, null=True)

    def __unicode__ (self):
            return u'%s %s %s %s %s' % (self.client, self.job_number, '-', self.cell_number, self.job_name) 

UserProfileモデルには電子メールフィールドがあります。これは、ビューの受信者リストに渡そうとしているものです。

def remote_request(request):
    if request.method=='POST':
        form = RemoteRequestForm(request.POST)
        if form.is_valid():
                name = form.cleaned_data['job_name']
                subject = form.cleaned_data['job_name']
                message = form.cleaned_data['job_notes']
                sender = form.cleaned_data['requested_by']

                recipients = [form.cleaned_data['**notify_internal.userprofile.email**']]

                from django.core.mail import send_mail
                send_mail(subject, message, sender, recipients)
                remoterq = form.save(commit=False)
                remoterq.save()
                form.save_m2m()
                return render(request, 'remote_tmps/remoterequest.html', {'form': form,
            })
    else:
            form = RemoteRequestForm()
            return render(request, 'remote_tmps/remoterequest.html', {'form': form,})

残念ながら、「notify_internal.userprofile.email」はキーエラーをスローし、これらの電子メール受信者を適切に渡す方法がわかりません。

4

1 に答える 1

0

Pythonドット表記の文字列を渡すと、辞書検索で特別なことができると思いますか?

オブジェクトを保存しているので、保存後、m2m()を保存した後、受信者をプルするだけです。

recipients = [user.email for user in remoterq.notify_internal.all()]

データを取得する方法については、ManyToManyFieldドキュメントをご覧ください。QuerySetfield属性で公開されているインターフェースがあります。

于 2012-12-06T03:42:20.863 に答える