Django - передача диктанта из POST-формы
Есть от с различными элементами
<input name='id' value='123'/>
<input name='some_value' value='123'/>
<!-- thing that i want-->
<input name='array[key_1]' value='value_1'/>
<input name='array[key_2]' value='value_2'/>
<input name='array[key_3]' value='value_3'/>
<input name='array[key_4]' value='value_4'/>
</form>
Если я использовал PHP, данные массива будут собраны в $_POST["array"]. Итак, вопрос в том, как собрать диктуемый "массив" в django views?
Вы можете получить все значения формы в представлении, указав их атрибут name
в request.POST
дикте так:
def some_view(request):
if request.method=='POST':
id=request.POST.get('id')
some_value=request.POST.get('some_value')
Попробуйте этот код...
views.py
def DemotimeView(request):
if request.method == 'POST':
data = dict(request.POST)
del data['csrfmiddlewaretoken']
print({i:j[0] for i,j in data.items()})
return render(request, 'index.html',)
HTML
<form action="" method="post">
{% csrf_token %}
<input name='id' value='123'/>
<input name='some_value' value='123'/>
<!-- thing that i want-->
<input name='key_1' value='value_1'/>
<input name='key_2' value='value_2'/>
<input name='key_3' value='value_3'/>
<input name='key_4' value='value_4'/>
<button type="submit">Add</button>
</form>
Выход
{'id': '123', 'some_value': '123', 'key_1': 'value_1', 'key_2': 'value_2', 'key_3': 'value_3', 'key_4': 'value_4'}
Я не уверен, что это лучший способ, но он работает. Я решил переименовать params без [] и объединить их с ключом dict с разделителем "__"
Итак, вот оно
template:
<input type="text" name="name"
value='Yuretz'/>
<input type="text" name="last_name"
value='Oguretz'/>
{% for line in print_values %}
<div>
<b>{{line.name}}</b><br/>
<input type="text"
name="param__{{line.name}}"
value="{{line.value}}"/>
</div>
{% endfor %}
views.py
params_data = {}
all_post_data = request.POST.dict()
for line in all_post_data:
if line.startswith('param__'):
params_key = line.replace('param__','')
params_value = all_post_data[line]
params_data[params_key]=params_value
### finally
print(params_data)
Надеюсь, это кому-нибудь поможет