Как добавить новые элементы в мой шаблон электронной почты (django)
Я делаю форму, которая будет отправлять письмо после заполнения полей. Письмо должно содержать всю информацию, написанную в форме, но в форме я сделал кнопку для добавления дополнительных элементов, и это приведет к появлению двух новых полей "выбрать компонент" и "количество". Как я могу получить данные из этих полей, которые будут созданы после нажатия на кнопку "добавить компонент" и поместить их в мое письмо?
my views.py
def home(request):
if request.method == 'POST':
form = Form(request.POST)
if form.is_valid():
type = form.cleaned_data['type']
serialNumber = form.cleaned_data['serialNumber']
itemNumber = form.cleaned_data['itemNumber']
date = form.cleaned_data['date']
phase = form.cleaned_data['phase']
capacity = form.cleaned_data['capacity']
centerQuantity = form.cleaned_data['centerQuantity']
componentQuantity = form.cleaned_data['componentQuantity']
componentSelection = form.cleaned_data['componentSelection']
commentary = form.cleaned_data['commentary']
html = render_to_string('emails/email.html', {
'type': type,
'serialNumber': serialNumber,
'item': itemNumber,
'date': date,
'phase': phase,
'capacity': capacity,
'centerQuantity': centerQuantity,
'componentQuantity': componentQuantity,
'componentSelection': componentSelection,
'commentary': commentary,
}
)
send_mail('ATENÇÃO', 'Message', 'no-reply@weg.net', ['koura@weg.net'], html_message=html, fail_silently=False)
return redirect('home')
else:
form = Form()
return render(request, 'template.html', {
'form': form
})
Мой html-файл:
My forms.py:
from django import forms
material_type = (
('material', 'Search with material'),
('serial', 'Search with serial number'),
)
component_type = (
('AIR FILTER', 'AIR FILTER'),
('ALUMINIUM FAN', 'ALUMINIUM FAN'),
('BEARING CAP DE', 'BEARING CAP DE')
)
class Form(forms.Form):
type = forms.ChoiceField(choices=material_type, initial="Select One Option")
serialNumber = forms.CharField(label='Serial Number', required=False)
itemNumber = forms.IntegerField(label='Item Number', required=False)
date = forms.DateField(label='Manufactoring Date',widget=forms.DateInput(attrs={'placeholder':'Ex: 10/05/2022'}))
phase = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Ex: Monophasic'}))
capacity = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Ex: 15cv'}))
centerQuantity = forms.IntegerField(label='Center Quantity')
componentSelection = forms.ChoiceField(choices=component_type, label='Component Selection')
componentQuantity = forms.IntegerField(label='Component Quantity')
componentSelection1 = forms.ChoiceField(choices=component_type, label='Component Selection', required=False)
componentQuantity1 = forms.IntegerField(label='Component Quantity', required=False)
commentary = forms.CharField(widget=forms.Textarea(attrs={"rows":8, "cols":80}))
Справиться с этим сценарием с помощью простых представлений и форм django не совсем просто.
- Вам необходимо установить атрибут input name, используя инкрементированный индекс и имя поля в вашем javascript.
- Добавьте значение счетчика инкремента в специальное поле вашей формы, чтобы django знал, сколько полей было добавлено с помощью javascript.
- В методе
__init__()
вашей формы вы должны динамически добавлять поля, используя предоставленный инкрементный индекс. - В вашем представлении вы можете перебирать динамические поля, используя также инкрементированный индекс.
Несколько полезных ссылок: