我想要一个将表单保存到会话的按钮

时间:2018-04-05 20:53:09

标签: django python-3.x django-forms

我有一个很长的表单,我希望我的用户能够将其保存在会话中,执行其他操作并稍后再返回。

我正在考虑在中间的某个位置激活保存到会话的操作,并引导另一个表单创建一个必要的对象。

<a href="{% url 'tag:create_new_tag'%}">
   <button class="btn btn-primary" value="">
     Add New Tag
    </button>
</a>

问题是,如果我插入没有任何类型的按钮(如上面的代码),表单将被提交并且我的对象保存到数据库,但我只是希望它保存在会话中。 另一方面,如果我添加type=button属性,HTTP请求将只是一个GET,所以我无法检索到目前为止完成的字段。

那么最好的方法是怎样做?

2 个答案:

答案 0 :(得分:1)

您似乎正在使用Bootstrap或类似的框架。首先,您不必在<button>元素中包含<a>,这也违反了W3C标准。其次,使用Bootstrap,您可以在此期间仅使用a元素将其呈现为按钮:

<a href="{% url 'tag:create_new_tag'%}" class="btn btn-primary" id="btn-add-new-tag">
  Add New Tag
</a>

在打开django网址'tag:create_new_tag'时,您似乎还需要保留表单。如果打开一个新的窗口/标签是可以接受的:

<a target="_blank" href="{% url 'tag:create_new_tag'%}" class="btn btn-primary" id="btn-add-new-tag">
  Add New Tag
</a>

此外,如果您想在打开网址时保存表单,则必须使用JavaScript:

var btnAddNewTag = document.getElementById('btn-add-new-tag');
var form = document.getElementById('your-form');
btnAddNewTag.addEventListener('click', function() {
    form.submit();
}, false);

答案 1 :(得分:0)

由于此处发现了另一个问题,我实际上发现了如何做到我想到的  How can I build multiple submit buttons django form?

所以我放了两个不同的提交按钮,将请求发送到同一个

<input class="btn btn-primary" name="add-new-tag" type="submit" value="Add New Grammar" />

<input class="btn btn-primary" name="submit-question" type="submit" value="Save" />

但是,在我处理表单的视图函数中,我提出了类似

的条件
if 'add-new-tag' in form.data:
    #save the datas i need in session, and switch to a second form
    # when second form is completed and saved, redirect back to the 
    # main form and populate fields with data from session
else:
    #submit the main form

这允许我只使用一个窗口