Форма модели Django не получена в пост-запросе, когда поля изменены AJAX - PullRequest
0 голосов
/ 18 марта 2019

Я новичок в javascript и Django, поэтому извините, если мой вопрос может быть простым.

Я использую форму модели Django для визуализации моих полей.Это хорошо в HTML.Тогда я решил добавить компонент select2.Я хотел добиться того, чтобы компонент select2 получал свои данные из конечной точки API, и, если выбран параметр, я хотел получить данные выбранного параметра в БД, а затем заменить значение в текстовых полях Django.Я сделал это, получив идентификаторы визуализированных компонентов Django, затем используя jquery, чтобы выбрать их и изменить их значение на результат вызова API.

, поэтому здесь представлена ​​форма модели:

class ProfileModelForm(ModelForm):
    def __init__(self, *args, **kwargs):
        class Meta:
            model = Profile
            exclude = ['id']

и вот пример фрагмента шаблона:

<div class="row mt-1">
    <div class="col-4 offset-md-4">
        <label for="existing">Search</label><br/>
        <select class="form-control" id="existing">
        <option></option>
        </select>
    </div>
</div>
<hr/>

<div class="row mt-1">
    <div class="col-3">
        <label for="input-first-name">First name</label>
        {% render_field  ProfileModelForm.first_name class+="form-control form-control-sm" placeholder="First name" %}
    </div>
    <div class="col-3">
        <label for="input-middle-name">Middle name</label>
        {% render_field  ProfileModelForm.middle_name class+="form-control form-control-sm" placeholder="Middle name" %}
    </div>
    <div class="col-3">
        <label for="input-last-name">Last name</label>
        {% render_field  ProfileModelForm.last_name class+="form-control form-control-sm" placeholder="Last name" %}
    </div>
    <div class="col-3">
        <label for="input-last-name">Suffix</label>
        {% render_field  ProfileModelForm.suffix class+="form-control form-control-sm" placeholder="Suffix" %}
    </div>
</div>

И вот что я сделал с шаблоном:

$("#existing").on("select2:select", function(e) {
  data = e.params.data;
  $.ajax({
  url: "/sacrament/profiles/" + data["id"],
  beforeSend: function(xhr) {
  xhr.setRequestHeader("X-CSRFToken", Cookies.get("csrftoken"));
  },
  type: "GET",
  success: function(json) {
      profile = JSON.parse(json)[0]["fields"];
      $("#id_profile-first_name").val(profile["first_name"]);
      $("#id_profile-middle_name").val(profile["middle_name"]);
      $("#id_profile-last_name").val(profile["last_name"]);
      $("#id_profile-suffix").val(profile["suffix"]);
      $("#id_profile-gender").val(profile["gender"]);
      $("#id_profile-birthdate").val(profile["birthdate"]);
      $("#id_profile-birthplace").val(profile["birthplace"]);
      $("#id_profile-residence").val(profile["residence"]);
      $("#profile_ID").val(data["id"]);

      $("#id_profile-first_name").attr("disabled", "disabled");
      $("#id_profile-middle_name").attr("disabled", "disabled");
      $("#id_profile-last_name").attr("disabled", "disabled");
      $("#id_profile-suffix").attr("disabled", "disabled");
      $("#id_profile-gender").attr("disabled", "disabled");
      $("#id_profile-birthdate").attr("disabled", "disabled");
      $("#id_profile-birthplace").attr("disabled", "disabled");
      $("#id_profile-residence").attr("disabled", "disabled");
   },
// handle a non-successful response
   error: function(xhr, errmsg, err) {
  $("#results").html(
    "<div class='alert-box alert radius' data-alert>Oops! We have 
    encountered an error: " +
      errmsg +
      " <a href='#' class='close'>&times;</a></div>"
  ); // add the error to the dom
  console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console
}

});});

выглядит нормально, пока я не попытаюсь отправить форму в виде почтового запроса.Поля, отредактированные с помощью ajax, не являются частью request.POST.Я попытался распечатать бланк модели, чтобы проверить, где он сломался.Когда я печатаю форму модели в POST, я вижу, что ни одно из полей в измененной форме модели не было отправлено обратно.Я правильно использую Django и Ajax в этом контексте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...