Как сформировать список 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}")
Выход:
имя: момо
фамилия: тити