将数据传递回Django视图

时间:2017-03-29 17:45:17

标签: django django-templates django-views

在我的模板中的表格中,我有以下内容非常有效:

<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']

1 个答案:

答案 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