【发布时间】:2013-12-27 09:35:24
【问题描述】:
我正在编写一个基本上只是一个表单的 web 应用程序,它有一个复制字段的按钮,以便可以输入多个项目。我不能使用 SelectMultiple 字段或其任何变体,因为没有固定数量的选项可供选择。用户应该能够在字段中输入他们想要的任何内容,并且必须将它们保存在模型中并通过多对多字段链接到记录。这是用于演示的jsfiddle 链接。
HTML
<form>
<label>Field 1
<textarea rows="3"></textarea>
</label>
<label>Multiple Values Possible</label>
<div>
<input type="text">
<select>
<option value="1">1</option>
<option value="2">2</option>
</select>
</div>
<button id="add_div">Add</button>
</form>
JS
add_div = document.getElementById("add_div");
add_div.onclick = function () {
var div = this.previousElementSibling;
var new_div = div.cloneNode(true);
this.parentNode.insertBefore(new_div, this);
return false;
}.bind(add_div);
我不知道如何为此创建表单后端。没有任何字段类可以接收可变数量的数据并根据另一个字段验证每个数据。
我试图做的是为文本框/选择下拉对创建一个 MultiWidget/MultiValueField,然后在紧跟 django 的 ModelMultipleChoiceField 的类中子类化我的 MultiValueField。我试图让表单字段与模板一起使用时遇到了困难,允许我在使用特定表单实例进行渲染时将所有字段添加回呈现的页面(例如,当您使用 CheckboxSelectMultiple 小部件时,在表单实例中选中的框渲染检查)
有没有办法做到这一点,并且让 ModelForm 的保存方法也正确保存多对多字段?我知道我可以覆盖表单的保存方法并执行类似this stackoverflow question 的操作,但我宁愿让表单字段本身处理所有保存逻辑。
【问题讨论】:
标签: django django-forms many-to-many