получить метку поля, help_text и значение в качестве контекста после отправки формы - PullRequest
0 голосов
/ 13 марта 2019

Я хочу отправить электронное письмо пользователю на основании его / ее ответа. Как мне установить контекст, чтобы я мог получить доступ к метке, help_text и значению каждого поля в моем шаблоне.

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

Примечание: у каждого пользователя могут быть разные вопросы и разные help_texts.

1 Ответ

0 голосов
/ 13 марта 2019

Вы можете получить эти значения в вашем 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)

В дальнейшем вы можете передать эти параметры в свой контекст.

...