使用Ajax动态地将表单集添加到Django中的表单

时间:2011-11-18 14:59:50

标签: javascript ajax django django-forms

如何使用AJAX实现以下用例?我读了question这是我能找到的最接近我的用例但是我仍然不确定如何开始。

使用案例

我在票据项的输入文本字段中输入数量编号,例如“3”。输入此值后,下方会显示3个表单集,其中包含电子邮件字段。

从概念上讲,我在考虑输入值的变化,加载django formset变量,如

    {% for form in formset %}
    {{ form }}
    {% endfor %}

在javascript onChange函数中,但我不知道如何实际执行此操作。

1 个答案:

答案 0 :(得分:1)

我有一个类似的用例,其中formset可以由标准的http响应或Ajax加载来呈现。

我的DRY解决方案是:

标准http响应(整页)

视图实例化formset,渲染模板,但在其中我有一个{% include "path/to/formset-snippet.html %}标记(由带有标记的包围,可重复使用以下内容)。

AJAX响应

我进行Ajax调用以在DOM节点中呈现html片段(比如说a)。在 JQuery 中就是这样的:

$("#my_container").load(url, function(response, status, xhr) {
      if (status == "error") {
        $(this).html("Sorry but there was an error: " + 
                     xhr.status + " " + xhr.statusText +
                     '<div style="height:300px; overflow:scroll;">' + 
                     response + "</div>");
      }
});

视图实例化相同的formset并呈现 formset-snippet.html 。这里有 MyModel 的例子, images 与:

相关联
@login_required
def images_formset(request, object_id):
    instance = MyModel.objects.get(pk=object_id)
    prefix = request.GET.get('form_prefix', None)
    formset = ImageMyModelFormSet(instance=instance, prefix=prefix)
    return render_to_response('my_app/images_my_model_form_snippet.html', {
                              'images_my_model_formset': formset,
    }, context_instance=RequestContext(request))

希望它有所帮助。