send_mail в Django добавление новых полей

Govard

Новичок
Пользователь
Апр 21, 2020
22
4
3
Здравствуйте. Это снова я!) Пришел я к вам опять с проблемой. Подскажите пожалуйста, у меня есть форма обратной связи в разделе контакты и она в рабочем состоянии, вот:

views.py

Python:
def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            mail = send_mail(form.cleaned_data['subject'], form.cleaned_data['content'], 'random@site.ru', ['random1@mail.ru'], fail_silently=True)
            if mail:
                messages.success(request, 'Письмо отправлено!')
                return redirect('contact')
            else:
                messages.error(request, 'Ошибка отправки')
        else:
            messages.error(request, 'Не верно заполнено одно из полей')
    else:
        form = ContactForm()
    return render(request, 'news/contacts.html', {"form": form})

contact.html

HTML:
        <form method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit" class="btn btn-primary btn-block">Отправить</button>
        </form>

forms.py

Python:
# Контактная форма
class ContactForm(forms.Form):
    name = forms.CharField(label='Имя', widget=forms.TextInput(attrs={'class': 'form-control'}))
    email = forms.EmailField(label='E-mail', widget=forms.TextInput(attrs={'class': 'form-control'}))
    subject = forms.CharField(label='Тема', widget=forms.TextInput(attrs={'class': 'form-control'}))
    content = forms.CharField(label='Текст', widget=forms.Textarea(attrs={'class': 'form-control', "rows": 5}))
    captcha = CaptchaField()

Всё работает идеально, кроме одного. Я не знаю как мне добавить дополнительные поля, чтобы когда приходило письмо там был не только content, но и другие поля, а именно name, email и допустим ещё номер телефона человека который отправил форму.

Что мне нужно изменить, добавить тут:
Python:
  mail = send_mail(form.cleaned_data['subject'], form.cleaned_data['content'], 'random@site.ru', ['random1@mail.ru'], fail_silently=True)
Чтобы я был счастлив?)

Я порыл в интернетах, но толкового ответа не нашел. Хотя и думал, что это не такая уж и большая проблема...
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Функция send_mail в качестве тела сообщения (второй аргумент) принимает строку.
Можно просто добавить туда значения из других полей формы (сформировать тело сообщения перед отправкой).
Вот так например:
Python:
message = ''
message += f'Имя: {form.cleaned_data["name"]}\n'
message += f'Почта: {form.cleaned_data["email"]}\n'
message += f'Сообщение:\n'
message += f'{form.cleaned_data["content"]}'

mail = send_mail(form.cleaned_data['subject'], message, 'random@site.ru', ['random1@mail.ru'], fail_silently=True)
 
  • Мне нравится
Реакции: Govard

Govard

Новичок
Пользователь
Апр 21, 2020
22
4
3
Функция send_mail в качестве тела сообщения (второй аргумент) принимает строку.
Можно просто добавить туда значения из других полей формы (сформировать тело сообщения перед отправкой).
Вот так например:
Python:
message = ''
message += f'Имя: {form.cleaned_data["name"]}\n'
message += f'Почта: {form.cleaned_data["email"]}\n'
message += f'Сообщение:\n'
message += f'{form.cleaned_data["content"]}'

mail = send_mail(form.cleaned_data['subject'], message, 'random@site.ru', ['random1@mail.ru'], fail_silently=True)

Спасибо большое)) заработало как всегда)) почему я рою всегда не там видимо где нужно...... Вы прекраснейший человек))
 

Форум IT Специалистов