首页 > 解决方案 > Django:通过 Ajax 使用表单填充模式

问题描述

我正在尝试在模式中显示一个预填充的表单,以便用户可以单击一个项目,该模式打开时会显示一个表单,其中包含用户可以编辑和保存的该项目的数据。

我可以使用 json 序列化程序将数据从视图发送到模式,但我找不到如何发送表单。

当我测试这个时,我收到一个错误声明"Object of type FormularioTareas is not JSON serializable"

问题似乎很清楚,我无法通过 json 响应发送表单。我该如何处理?

提前致谢!

模板中的模态调用

 <form name="form" action="#" id="form_tarea_{{tarea.id}}" method="POST">
    {% csrf_token %}
    <input name="id" id="tarea_id_submit" type="text" value="{{tarea.id}}" hidden="true"/>
    <a href="" id="{{tarea.id}}" class="show_tarea" data-toggle="modal" >Este link</a>
 </form>

Ajax 脚本

在这里,我现在$('#caca').text(tarea_data.caca);仅用于测试我可以正确地将一些信息发送到模态。有用。

我想我应该将该“文本”类型更新为另一种才能工作。

    <script>
           $(function(){
                $('.show_tarea').on('click', function (e) {
                    e.preventDefault();
                    let tarea_id = $(this).attr('id');

                    $.ajax({
                        url:'/catalog/tareas-detail/',
                        type:'POST',
                        data: $('#form_tarea_'+tarea_id).serialize(),
                        success:function(response){
                            console.log(response);
                            $('.show_tarea').trigger("reset");
                            openModal(response);
                        },
                        error:function(){
                            console.log('something went wrong here');
                        },
                    });
                });
            });

            function openModal(tarea_data){
                $('#caca').text(tarea_data.caca);
                $('#modal_tareas').modal('show');
            };
    </script>

风景

def TareaDetailView(request):
    context = {}
    tareas = Tareas.objects.values()
    context[tareas] = Tareas.objects.all()
    if request.method == 'POST' and request.is_ajax():
        ID = request.POST.get('id')
        tarea = tareas.get(pk=ID)  # So we send the company instance
        tareas_form = FormularioTareas(tarea)
        caca = ID

        return JsonResponse(tareas_form, safe=False)
    else:
        return render(request, 'catalog/artista.html', context)

标签: ajaxdjangodjango-formsmodal-dialog

解决方案


Django 表单不是 json 可序列化的。要么将模型传递给 json 响应,要么将表单作为 text/json 返回。

return JsonResponse(serializers.serialize('json', tarea), safe=False)


推荐阅读