Как добавить новые элементы в мой шаблон электронной почты (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 не совсем просто.

  1. Вам необходимо установить атрибут input name, используя инкрементированный индекс и имя поля в вашем javascript.
  2. Добавьте значение счетчика инкремента в специальное поле вашей формы, чтобы django знал, сколько полей было добавлено с помощью javascript.
  3. В методе __init__() вашей формы вы должны динамически добавлять поля, используя предоставленный инкрементный индекс.
  4. В вашем представлении вы можете перебирать динамические поля, используя также инкрементированный индекс.

Несколько полезных ссылок:

Вернуться на верх