Ajax post multiple inputs

У меня есть html-поля ввода с именем personals. Я использую [], чтобы иметь несколько входов на одно и то же имя и публиковать их. До этого я использовал обычную форму отправки. И я получил ее в бэкенде Django с помощью getlist('personal[]'). Все работает, как ожидалось.

В качестве информации: коды не являются полными. Показаны только самые важные строки.

Мой html код до

<input type="text" name="personals[]" id="personals[]" placeholder='Email'> 
<input type="text" name="personals[]" id="personals[]" placeholder='Phone'>

Мой взгляд до

def build(request):
    if request.user.is_authenticated:

        if request.method == 'POST':
            name = request.POST.get('name')
            personals = request.POST.getlist('personals[]')

Теперь я использую Ajax для отправки, не перезагружая страницу. Он больше не работает с personals[], поэтому я изменил его на personals, только без скобки.

Проблема в том, что personal содержит только первый вход. Но не все остальные.

Важно использовать одно и то же имя ввода (в данном случае personals), потому что я использую некоторые динамические поля ввода, где пользователи могут добавлять дополнительные поля. Поэтому я не хочу менять имя, например, на personals1 и personals2.

Мой html-код сейчас

<input type="text" name="personals" id="personals" placeholder='Email'> 
<input type="text" name="personals" id="personals" placeholder='Phone'>

Мое мнение сейчас

def build(request):
    if request.user.is_authenticated:

        if request.method == 'POST':
            name = request.POST.get('name')
            personals = request.POST.get('personals')

Моя ajax функция

    $.ajax({
                type: 'POST',
                cache: false,
                url: "{% url 'creator:build' %}",
                data: {
                    name:$('#name').val(),
                    personals:$('#personals').val(),
                    csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
                })

Ваша проблема, вероятно, в том, что у вас есть несколько значений в 'personals', но вы получаете только одно в вашем представлении, вы должны попробовать использовать request.POST.getlist('personals[]').

В качестве более общего момента, вы, похоже, собираете данные электронной почты и телефона в ваших входных данных - ваши входные имена должны быть 'email' и 'phone', и вы можете использовать форму Django для отображения и обработки этих входных данных гораздо проще. Если пользователь может создавать дополнительные поля или формы, то они могут обрабатываться Django формами или наборами форм.

Я нашел решение:

var personals = [];
$('input[name="personals[]"]').each(function() {
    personals.push(this.value);
});

Здесь ajax:

$.ajax({
            type: 'POST',
            cache: false,
            url: "{% url 'creator:build' %}",
            data: {
                name:$('#name').val(),
                personals: personals,
                csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
            })

и, наконец, вид:

def build(request):
    if request.user.is_authenticated:

        if request.method == 'POST':
            name = request.POST.get('name')
            personals = request.POST.getlist('personals[]')

отправить 2 или более входных данных с одинаковым именем с помощью ajax

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