Добро пожаловать в stackoverflow! Необходимо понимать, что каждая форма имеет имя, относящееся к ее входам. Например:
<input type="text" name="input1">
Атрибут ввода name
позволяет представлению (бэкэнду) обрабатывать каждый ввод отдельно внутри POST
или GET
запрос. Но имя должно быть уникальным.
Если name
для двух входов одинаковое, вы получите MUltiKeyError.
Вы можете достичь того, что хотите, но для что вам придется обрабатывать дополнительные входные данные самостоятельно, а Образцовая форма не сделает этого за вас. Прежде всего вам нужно сгенерировать поля ввода, которые можно сделать с помощью Javascript.
Внутри уже существующего тега формы у вас есть кнопка +, присоедините к ней атрибут onclick, например:
<form id="DynamicForm">
<button onclick="AddInput()"></button>
</form>
Также укажите свой атрибут form и id, чтобы получить его в Javascript.
В прикрепленном скрипте или теге Inline Script вы можете добавить JS код, подобный этому:
<script>
var counter = 0;
function AddInput(){
let h = '<input type="text" name="input'+counter+'">';
var d = document.getElementById('DynamicForm');
d.insertadjacenthtml('beforeend',h);
counter = counter+1;
}
</script>
Затем вам нужно получить доступ к этим полям ввода, которые вы можете сделать, используя:
....
if request.method == 'POST':
form = ModelFormName(request.POST)
if form.is_valid():
data = form.cleaned_data['input1']
else:
#FormInvalid Error
else:
#NotValid Request Method
....
Теперь вы можете узнать, сколько входов добавил пользователь, для этого вы можете использовать тот же счетчик переменной и добавьте еще один вход с именем new_input_len
со значением, установленным на самое высокое значение, достигнутое счетчиком. Затем используйте это входное значение, чтобы выполнить итерацию для l oop в вашем бэкэнде и получить доступ ко всем добавленным входам.