我试图以模式显示预填充的表单,以便用户可以单击一个项目,该模式将打开,显示一个包含该项目的数据的表单,用户可以编辑和保存。
我可以使用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)
答案 0 :(得分:0)
Django表单不可json序列化。要么将模型传递给json响应,要么将表单作为text / json返回。
return JsonResponse(serializers.serialize('json', tarea), safe=False)
答案 1 :(得分:0)
我以前从未使用过django或phyton,但我会尽力帮助您:
首先使用ajax,尝试使用成功的手段,在本示例中,您将从某些选择中获取信息,以使用特定的
填充模态内的表单。function getData(clientId){
return $.ajax({
method: "POST",
url: "YourUrl",
data: { action: "SLC", clientId: clientId}
})
}
然后您得到了自己的东西:
getData(clientId).done(function(response){
//manage your response here and validate it
// then display modal, note: you must have some conditions to get the array
//and fill each input use JSON.parse to get the json array elements
openModal(response);
})
希望有帮助