0
我有一个模型窗体。该表单包含一个按钮“添加更多字段”。点击这个按钮发送一个AJAX调用,它应该在表单中添加一个文本字段。可以添加任意数量的“文本字段”。Django使用AJAX调用将单个字段添加到模型窗体
我不确定Django-Formsets是否是正确的方法,因为我需要将“额外添加的字段”的数据存储在数据库的同一个模型表中。
我该如何做到这一点?
我有一个模型窗体。该表单包含一个按钮“添加更多字段”。点击这个按钮发送一个AJAX调用,它应该在表单中添加一个文本字段。可以添加任意数量的“文本字段”。Django使用AJAX调用将单个字段添加到模型窗体
我不确定Django-Formsets是否是正确的方法,因为我需要将“额外添加的字段”的数据存储在数据库的同一个模型表中。
我该如何做到这一点?
我做了一些类似的最近,我的解决办法是动态的子类的形式,只提供外地需要和渲染只是场:
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
工作,并创建了一个specifi用户的形式组织,在无通话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" />
我没有得到它。请您详细说明一下吗?什么是形式[字段]? – rightskewed 2012-01-12 15:49:40
@SaketChoudhary - 我希望我的更新更清楚。 – Nate 2012-01-12 16:58:39