对于我的一个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
中获取此行级数据?
答案 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。