gpt4 book ai didi

javascript - 使用 Django 和 JS 的可变长度表单

转载 作者:行者123 更新时间:2023-11-29 20:09:29 25 4
gpt4 key购买 nike

我想创建一个包含多个文本区域的表单。理想情况下,用户将能够按下页面上的按钮以向表单添加另一个文本区域。我已经得到了这个简单的部分,它使用了一点点 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() 函数只是向表单添加另一个文本区域输入:

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_1textarea_2 等),然后循环查看是否 request.POST[ 'textarea_' + str(i)] 存在,并将其添加到字符串列表中。不过,这似乎确实效率低下,而且启动起来非常难看。有没有更好、更 Pythonic 的方法来做到这一点?

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

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

最佳答案

使用Formsets .它们允许您以一种形式编辑多个对象。您的表单集最好位于问题类中。

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

in your view ,你会有这样的东西:

formset = QuestionFormSet(request.POST)
if formset.is_valid():
# etc.

关于javascript - 使用 Django 和 JS 的可变长度表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com