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)

Надеюсь, это кому-нибудь поможет

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