0

I want to send email to the user based on his/her response. How do I set the context so that I can access label, help_text and value of each field in my template.

forms.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')

views.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})

NB: Each user may have different question and different help_texts.

Pritam
  • 333
  • 3
  • 13

1 Answers1

0

You can get these values inside your POST request and then pass them to mail function.

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)

You can further pass these parameters to you context.

Jagjeet Singh
  • 547
  • 5
  • 11