Django如何处理来自具有多行的表的表单数据?

时间:2012-05-10 13:59:18

标签: django django-forms

对于我的一个Django项目,我的HTML页面包含一个表格,而该表格又包含一个表格。表格的结构如下:

<form name="bill" action="" method="post">
    <ul>
        <li>
            <label for="id_date">Date </label>
            <input type="text" name="date" id="id_date" />
        </li>
        <li>
            <label for="id_description">Description </label>
            <input id="id_description" type="text" name="description" maxlength="300" />
        </li>
        <li>
            <label for="id_amount">Total Amount </label>
            <input type="text" name="amount" id="id_amount" />
        </li>
        <li>
            <label for="id_debtors">Split Among </label>
            <table class="unequal_split">
                <thead>
                    <th>Name</th>
                    <th>Paid For</th>
                    <th>Amount</th>
                </thead>
                <tbody>
                        <tr>
                            <td> 
                                <select name="people">
                                    <option value="xx">XX</option>
                                    <option value="yy">YY</option>                                        
                                    <option value="zz">ZZ</option>
                                </select>
                            </td>
                            <td>
                                <select name="number_of_people">
                                    <option value="1">1 person</option>
                                    <option value="2">2 people</option>
                                    <option value="3">3 people</option>
                                    <option value="4">4 people</option>
                                    <option value="5">5 people</option>
                                </select>
                            </td>
                            <td>
                                <input type="text" name="individual_amount" />
                            </td>
                        </tr>                        
        <li>
            <label for="save"></label>
            <button id="save" type="submit">Save</button>
        </li>
    </ul>
</form>

您在上面看到的表格行重复了三次。

request.POST中,如果我执行getlist,我可以获取单个值,但正如您在上面所看到的,每行都有一组需要单独处理的详细信息。所以我的问题是,我究竟如何在views.py中获取此行级数据?

3 个答案:

答案 0 :(得分:2)

这些表以及HTML中嵌入的字段有多少绝对与Django中的字段访问方式有关(用任何语言表示)。

无论name属性是什么,这都是request.POST中的关键。就这么简单。

答案 1 :(得分:1)

如果我理解正确,您说完全呈现的表单有三个不同的select输入,名为people,三个名为number_of_people,三个名为individual_amount

HTTP POST中有一种方法可以从输入中访问多个值的列表,但它实际上只适用于<select multiple="multiple"><input type="checkbox">等 - 即来自单个的多个值输入而不是具有相同名称的多个..

我建议,因为你暗示你在视图代码而不是ModelForm中生成表行(而不是上面的<li> s),而不是{{1您使用<select name="people"><select name="people_1">等三次

然后在您的视图代码中,您可以<select name="people_2">等方式访问它们。

答案 2 :(得分:1)

由于您使用ModelForm,我猜每个HTML行都有一个相应的DB行。为每个DB行(模型实例)创建一个ModelForm并为其指定前缀。或者您可以使用formset。我的建议:永远不要从request.POST或request.GET中读取,请使用form.cleaned_data。