0

我想根据他/她的回复向用户发送电子邮件。如何设置上下文以便我可以访问模板中每个字段的标签、帮助文本和值。

表格.py

class ResponseForm(ModelForm):
    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        super(ResponseForm, self).__init__(*args, **kwargs)
        if user:
            for key, value in question_answer_dict.items():
                self.fields[key].help_text = getattr(user, key + '-HelpForThisUser')

    class Meta:
        model = ResponseModel
        exclude = ('author', 'submit_count')

视图.py

@login_required
def ResponseFormView(request):
    def mail():
        subject = 'Thank you!'
        email_from = settings.EMAIL_HOST_USER
        recipient_list = [request.user.email, ]
        html_message = render_to_string(
            'mail_template.html', {'context': suitable_context})
        plain_message = strip_tags(html_message)
        send_mail(subject, plain_message, email_from,
                  recipient_list, html_message=html_message)
    if request.method == "POST":
        form = ResponseForm(request.POST)
        if form.is_valid():
            submission = form.save(commit=False)
            submission.author = request.user
            submission.save()
            mail()
            return render(request, 'thanks.html', {})
    else:
        form = ResponseForm(user=request.user)
        return render(request, 'response_tem.html', {'form': form})

注意:每个用户可能有不同的问题和不同的帮助文本。

4

1 回答 1

0

您可以在 POST 请求中获取这些值,然后将它们传递给邮件函数。

if form.is_valid():
    field_value = form.cleaned_data.get('field_name', None)
    if field_value:
        field_label = form.fields.get('field_name').label
        field_help_text = form.fields.get('field_name').help_text
        mail(field_value, field_label, field_help_text)

您可以进一步将这些参数传递给您的上下文。

于 2019-03-13T09:27:00.703 回答