在我的模板中的表格中,我有以下内容非常有效:
<tbody>
{% for item in items %}
<tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
<td>{{ item.status }}</td>
<td>{{ item.start_time }}</td>
<td>{{ item.end_time }}</td>
</tr>
</tbody>
我想添加一个将items
发布到视图的表单。我试过这个:
<form align="center" action="{% url 'app:doit' %}" method="post" ><b></b>
{% csrf_token %}
<input type="hidden" name="items" value="{{ items}}" />
<input type="submit" name="export" value="Export" >
</form>
但这并不像我预期的那样有效。数据作为一系列字符进入视图,如下所示,“,...”如何将{{items}}
传递回视图,以便将项目作为python对象处理?
我视图中的导出方法包含:
if 'items' in request.POST:
my_items = request.POST['items']
答案 0 :(得分:0)
您无法POST
QuerSet
返回视图。 HTML表单无法理解Django QuerySet
。不过那会很好!
你可以做的是创建一个custom template tag来产生这个:
<input type="hidden" name="items" value="{% my_items items %}" />
到此:
<input type="hidden" name="items" value="1,2,5,7,8" />
这些数字是每个id
的{{1}}。如果您愿意,也可以使用item
字段,因为公开name
不太安全。
然后,一旦id
编辑,我将在视图中执行:
POST
自定义模板标记如下所示:
if 'items' in request.POST:
# my_item_values is a str
my_item_values = request.POST['items']
try:
my_item_values = my_item_values.split(',')
except TypeError:
# Handle error of conversion from string to list here
else:
# typecast succedded. Get your items!
items = Item.objects.filter(id__in=my_item_values) # This is a QuerySet
# or this (if you used the names)
items = Item.objects.filter(name__in=my_item_values) # This is a QuerySet