Django使用AJAX调用将单个字段添加到Model表单

时间:2012-01-12 12:29:08

标签: python ajax django django-models django-forms

我有一个模型表单。表单包含一个“添加更多字段”按钮。单击此按钮会发送一个AJAX调用,该调用应该向表单添加文本字段。可以添加任意数量的“文本字段”。

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

我怎样才能做到这一点?

1 个答案:

答案 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" />