Django: заполнить модальную форму через Ajax - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь отобразить предварительно заполненную форму в модальном режиме, чтобы пользователи могли щелкнуть элемент, открывается модальное окно, отображающее форму с данными этого элемента, которые пользователи могут редактировать и сохранять.

Я могу отправить данные из вида на модал с помощью сериализатора 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)

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Я никогда раньше не использовал 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);
})

надеюсь, это поможет

0 голосов
/ 07 марта 2019

Формы Django не сериализуются в формате json.Либо передайте модель в ответ json, либо верните форму в виде текста / json.

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

...