Как сформировать список request.POST в Django
У меня есть следующий код в файле views.py:
def valores(request):
    global peso_unitario, preco_unitario
    peso_unitario=[]
    preco_unitario=[]
    N=a
    print('N='+str(N))
    for i in range(N):
        peso_u = request.POST['peso_u']
        preco_u = request.POST['preco_u']
        if peso_u.isdigit() and preco_u.isdigit():
            c = int(peso_u)
            d = int(preco_u)
            peso_unitario.append(c)
            preco_unitario.append(d)
            print(a)
            if i==N-1:
                return render(request, 'pacote.html', {'peso_unitario': peso_unitario, 'preco_unitario': preco_unitario})
        else:
            res = 'Apenas numero.'
            return render(request, 'pacote.html', {'res': res})
На предыдущем шаге мы заполнили текстовое поле числом N. Теперь я хочу сгенерировать N текстовых полей для заполнения пользователем, но не знаю, как это сделать.
Для динамического создания форм formset следует использовать N. Вы можете обратиться к документации, чтобы увидеть, как реализовать один из них.
Не используйте глобальные значения. Вам нужно где-то хранить ранее полученное число N. Возможно, в сессии пользователя. Может быть, передать его в это представление как строку запроса, и иметь значение по умолчанию или перенаправить обратно на форму, которая должна была получить его, если оно отсутствует.
В любом случае, получив это N, вы можете построить форму с N похожими формами динамически. (Как упоминалось другими, другой способ - использовать набор форм).
class Baseform( forms.Form):
   ...
   # everything apart from the variable  fields
fields = {}
for n in range(N):
     fields[ f'form_{n}'] = forms.Charfield( # or whatever
         label = f'form{n}', ... # other form args
     )
My_Dynamic_Form = type(
    'My_Dynamic_Form',  (BaseForm, ), fields
)
Ввести, проверить как обычно, обработать поля переменных:
form = My_Dynamic_Form( ...)
if form.is_valid():
    # your variable data will be in form.cleaned_data['form_0'] upwards.
    # maybe
    for n in range(1000):
        key = f'form_{n}'
        if not (key in form.cleaned_data):
            break
        val = form.cleaned_data.get(key)
        # do whatever with val 
 Вы можете итерировать  все размещенные данные, используя request.POST.items() пример:
for key, value in request.POST.items():
    print(f"{key}: {value}")
Выход:
имя: момо
фамилия: тити