Можно ли передать объекты модели django в список данных функции ajax? - PullRequest
0 голосов
/ 28 июня 2018

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

Сценарий - это модель с полями: script_id и имя_ сценария .

Имя URL Get_Scenario ссылается на функцию просмотра get_scenario , приведенную ниже.

Мой .html файл

<form action="" method="post">
   {% csrf_token %}

<div class="row">
<div class="col-md-1"></div>
<div class="col-md-5" id="orgdiv">
    <select class="form-control" id="txtOrganization" >
      <option value="" disabled selected>Select Organization</option>
        {% for organization in Organization %}
            <option value="{{ organization.org_id }}">{{ organization.org_name }}</option>
        {% endfor %}
    </select>
</div>

<div class="row">
<div class="col-md-1"></div>
<div class="col-md-5" id="scenariodiv">
   <select id="txtScenario" class="form-control" required>
        <option value="" disabled selected>Select Scenario</option>
    </select>

Моя функция AJAX

$('#txtOrganization').on("input", function () {
       if (scenarios) {
           $.ajax({
            type: "GET",
            url: {% url 'Get_Scenario' %},
            data: {scenarios: scenarios},
            success: function (data) {
                var udata = "";
                for (var i = 0; i < data.length; i++) {
                    udata = udata + "<option value='"+ scenarios[i].scenario_id + "'>" + scenarios.scenario_name + "</option>"

                }
                $("#txtScenario").append(udata);
            }
        });
        }
    });

views.py

def get_scenario(request):
    org_id = request.GET.get('org_id')
    organization = Organization.objects.get(pk=org_id)
    scenarios = organization.scenario_set.all()
    return scenarios

Я чувствую, что проблема заключается в передаче объекта модели django сценариев списку данных функции ajax, и, возможно, он не может получить доступ к полям в модели сценария. Нужно ли упоминать сценарии объектов в списке данных? Или это будет работать без него

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 28 июня 2018

В принципе это невозможно.

Когда ваш scenarios контекст передается в шаблон django, он будет преобразован в строку. Django автоматически сопоставляет объект с шаблоном. Вот что делают Джанго Context и Template.

Это означает, что весь отображаемый контекст будет string в шаблоне, включая ваш javascript. Вот так люди используют serialize.

Для получения дополнительной информации о serialize, проверьте документы ниже

Если вы хотите отправить запрос, используя ajax, все данные, которые вы хотите отправить, это string, а не объект django.

Итак, если вы хотите передать данные сценариев в ajax, вы можете просто передать идентификатор сценария.

Затем, по вашему мнению ({% url 'Get_Scenario' %}), вы можете получить списки объектов из этого списка идентификаторов и передать их в данные. как ниже

В ваших представлениях просто передайте scenarios_ids как organization.scenario_set.values_list('id', flat=True) и сериализуйте его для использования внутри javascript.

scenarios_ids_data = json.dumps(list(scenarios_ids))

И шаблон, используйте scenarios_ids_data

$('#txtOrganization').on("input", function () {
       var scenarios_ids = '{{ scenarios_ids_data }}';
       if (scenarios) {
           $.ajax({
            type: "GET",
            url: {% url 'Get_Scenario' %},
            data: {scenarios: scenarios_ids},
            success: function (data) {
                var udata = "";
                // also you will received serialized data and use it here
                }
                $("#txtScenario").append(udata);
            }
        });
        }
    });



                $("#txtScenario").append(udata);
            }
        });
        }
    });
...