2

我想创建一个包含多个文本区域的表单。理想情况下,用户将能够按下页面上的按钮将另一个文本区域添加到表单中。我已经用一点点 JS 完成了这个简单的部分,但我不确定如何提交这个表单并用 Django 存储结果——如果它总是有相同数量的文本区域,那就是很容易,但我不知道如何使用可变数字来做到这一点。我的 HTML 如下所示:

<body>
    <form action="foo" method="post" id="survey_form">
      <input type="textarea" rows="4" cols="20">
    </form>
    <button onclick="addQuestion();">add question</button>
</body>

addQuestion()函数只是将另一个 textarea 输入添加到表单中:

function addQuestion() {
    var form = document.getElementById('survey_form');
    var new_text_area = document.createElement('input');
    new_text_area.setAttribute('type','textarea');
    new_text_area.setAttribute('rows', '4');
    new_text_area.setAttribute('cols', '20');
    form.appendChild(new_text_area);
}

我的 Django 模型有一个字符串列表字段;这工作正常。现在的问题是如何从request.POST列表中获取表单数据。我正在考虑为每个新的 textarea 赋予其自己的唯一标识符(textarea_1,textarea_2等),然后循环并查看是否request.POST['textarea_' + str(i)]存在,并将其添加到字符串列表中。不过,这似乎真的很低效,而且很难启动。有没有更好、更 Pythonic 的方式来做到这一点?

另外,我不完全确定如何给每个文本区域一个唯一的标识符——我是 JS 的新手,我所有的知识都是从谷歌搜索中获得的。我正在考虑在索引变量上使用闭包i,然后i每次addQuestion()调用时递增。那有意义吗?

最后,非常感谢为程序员提供的关于 JS 的快速入门教程的指针。

4

1 回答 1

3

使用表单集。它们允许您以一种形式编辑多个对象。理想情况下,您的表单集将在 Question 类上。

然后从 JS 中添加新的文本区域,其名称为id_form-1-contentid_form-2-content

在你看来,你会有类似的东西:

formset = QuestionFormSet(request.POST)
if formset.is_valid(): 
    # etc.
于 2012-05-26T16:49:47.490 回答