【问题标题】:Dynamically adding a formset to a form in Django with Ajax使用 Ajax 将表单集动态添加到 Django 中的表单
【发布时间】:2011-11-18 14:59:49
【问题描述】:

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

用例

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

从概念上讲,我在想,在输入值的变化上,像加载 django formset 变量一样

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

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

【问题讨论】:

    标签: javascript ajax django django-forms


    【解决方案1】:

    我有一个类似的用例,其中一个表单集可以通过标准 http 响应或 Ajax 加载呈现。

    我的 DRY 解决方案是:

    标准http响应(整个页面)

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

    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-sn-p.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))
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 2012-01-27
      • 2018-08-26
      • 2015-02-14
      • 2020-06-30
      • 2014-10-21
      相关资源
      最近更新 更多