2012-01-12 62 views
0

我有一个模型窗体。该表单包含一个按钮“添加更多字段”。点击这个按钮发送一个AJAX调用,它应该在表单中添加一个文本字段。可以添加任意数量的“文本字段”。Django使用AJAX调用将单个字段添加到模型窗体

我不确定Django-Formsets是否是正确的方法,因为我需要将“额外添加的字段”的数据存储在数据库的同一个模型表中。

我该如何做到这一点?

回答

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工作,并创建了一个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" /> 
+0

我没有得到它。请您详细说明一下吗?什么是形式[字段]? – rightskewed 2012-01-12 15:49:40

+0

@SaketChoudhary - 我希望我的更新更清楚。 – Nate 2012-01-12 16:58:39

相关问题