我有一个模型表单。表单包含一个“添加更多字段”按钮。单击此按钮会发送一个AJAX调用,该调用应该向表单添加文本字段。可以添加任意数量的“文本字段”。
我不确定Django-Formsets是否是正确的方法,因为我需要将“额外添加的字段”的数据存储在数据库的同一模型表中。
我怎样才能做到这一点?
答案 0 :(得分:1)
我最近做了类似的事情,我的解决方案是动态地对表单进行子类化,只提供所需的字段,并只渲染该字段:
from forms import SomeModelForm
from models import SomeModel
def view_name(request,pk,field):
SomeModelFieldForm(SomeModelForm):
class Meta(SomeModelForm.Meta):
fields = (field,)
inst = SomeModel.objects.get(pk=pk)
form = SomeModelFieldForm(instance=inst)
#the rest of your view goes here...
#...send only the form's field:
ctx = {'field': form[field]}
return render_to_response("template",ctx)
这利用了原始表单的细节 - 即,如果您有特殊定义的小部件或其他限制或其他内容。然后,它将整个表单限制为单个字段。这是为了验证现有模型上的单个字段。
但是,您不希望发送整个表单,您只想发送单个字段。 form[field]
是django.forms.forms.BoundField
,代表您传递的特定字段。
例如,如果您正在使用User
中的django.contrib.auth.models
模型,并且您为特定用户创建了表单,则在空闲调用form["username"]
中将返回:
<django.forms.forms.BoundField object at 0x01354750>
并打印print form["username"]
将打印:
<input id="id_username" type="text" name="username" value="name_of_user" maxlength="30" />