Как получить значения из нескольких форм после POST в Django? - PullRequest
1 голос
/ 07 марта 2012

У меня есть несколько форм (выберите форму выбора) на одной HTML-странице для каждой строки. Предположим, есть варианты EDIT, UPDATE, ADD, если есть 5 строк, а пользователь выбирает UPDATE для двух строк, а затем нажмите Submit, мое представление обработает запрос.

Для обработки этого запроса мне нужен список выбранных вариантов:

 [{'row1':'UPDATE', 'row2': 'UPDATE'}]   (okay... I need to be able to distinguish which choice belongs to which row...)

Допустим, это мой HTML-файл.

<table>
<tr>
   <td>{{ form.as_p}}</td>
   <td> 121 </td>
</tr>
   <td>{{ form.as_p}}</td>
   <td> 212 </td>
</table>

<form action='' method="POST">{% csrf_token %}
<input type="submit" name="Submit!"></input>
</form>

Когда он рендерится, у нас это

<td><p><label for="id_choice_field">Choice field:</label> <select name="choice_field" id="id_choice_field">
<option value="value1">First</option>
<option value="value2">Second</option>
</select></p></td>
<td> 212 </td>
</table>
<form action='' method="POST"><div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='41f4aa9cc46e3e21bb46c99bc992973a' /></div> 
<input type="submit" name="Submit!"></input>
</form>

Я пытался

e = request.POST.getlist('choice_field')
return HttpResponse(e)

это дает мне пустую страницу, так что ничего нет .....

Как получить список выбранных значений из всей таблицы (и связанных с ней данных, например строки #)?

Спасибо.


Финальный код

views.py

from django.shortcuts import get_object_or_404, render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from forms import MyForm
from django.core.context_processors import csrf 

def my_form(request):
    if request.method == "POST":
        form = MyForm(request.POST)
        e = request.POST.getlist("choice_field")

        return HttpResponse(e)
    else:
        form = MyForm()
    c = {'form':form}
    c.update(csrf(request))
    return render_to_response('hello.html', c)

forms.py

from django import forms

CHOICES = (('value1', 'First',),('value2', 'Second',))

class MyForm(forms.Form):
    choice_field = forms.ChoiceField(choices=CHOICES)

hello.html

<form action='' method="POST">{% csrf_token %}
<table>
<tr>
   <td>{{ form.as_p}}</td>
   <td> 121 </td>
</tr>
   <td>{{ form.as_p}}</td>
   <td> 212 </td>
</table>
<input type="submit" name="submit"></input>
</form>

1 Ответ

1 голос
/ 07 марта 2012

Ваши поля данных находятся вне тега формы, поэтому вы ничего не получаете от POST. Поместите поля данных в тег формы как:

<form action='' method="POST"><div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='41f4aa9cc46e3e21bb46c99bc992973a' /></div>

<table>
<tr>
   <td>{{ form.as_p}}</td>
   <td> 121 </td>
</tr>
   <td>{{ form.as_p}}</td>
   <td> 212 </td>
</table>

<input type="submit" name="Submit!"></input>
</form>
...