Django автоматическая проверка, если я сохраню его в базе данных - PullRequest
4 голосов
/ 24 октября 2019

Вот мой HTML:

<input type="checkbox" value="1" name="Visual" id="visual">
<input type="checkbox" value="1" name="Tuberculosis" id="Tuberculosis">
<input type="checkbox" value="1" name="Skin" id="Skin">

<script type="text/javascript">
$('#checkbox-value').text($('#checkbox1').val());

$("#checkbox1").on('change', function() {
  if ($(this).is(':checked')) {
    $(this).attr('value', 'true');
  } else {
    $(this).attr('value', 'false');
  }

  $('#checkbox-value').text($('#checkbox1').val());
});
</script>

Вот мой взгляд:

Visual = request.POST['Visual']
Tuberculosis = request.POST['Tuberculosis']
Skin = request.POST['Skin']
V_insert_data = StudentUserMedicalRecord(
    Visual=Visual,
    Tuberculosis=Tuberculosis,
    Skin=Skin
)
V_insert_data.save(

Почему каждый раз, когда я сохраняю данные в своей базе данных, Visual, Tuberculosis и Skin автоматически проверяются, хотя я не проверял их при сохранении? Или я думаю, что мой JavaScript неверен?

Ответы [ 3 ]

4 голосов
/ 26 октября 2019
  1. Вам не нужно $('#checkbox-value').text($('#checkbox1').val());, если у вас нет такого элемента на странице, который вы нам не показали.
  2. Вы не можете определить более одного элемента ната же страница с тем же идентификатором. (То же самое относится и к атрибуту name). Используйте разные идентификаторы, как показано в моем коде, и сопоставьте чекбоксы по классу / имени.
  3. Не помещайте value="1" внутри своих флажков.
  4. Поместите свой код jQuery в $(function() { });, которыйпсевдоним для $( document ).ready(). Подробнее здесь .
  5. Не используйте голые request.POST значения, вместо этого используйте очищенные self.cleaned_data['var_name'].
  6. Не думаю, что это хорошая идеяиметь имена параметров с заглавными буквами (это просто примечание, это не повлияет на функциональность). Согласно Python PEP 8 , только классы должны начинаться с заглавной буквы.

Внешний интерфейс:

<input type="checkbox" name="Visual" id="checkbox1" class="checkbox-js-trigger-class">
<input type="checkbox" name="Tuberculosis" id="checkbox2" class="checkbox-js-trigger-class">
<input type="checkbox" name="Skin" id="checkbox3" class="checkbox-js-trigger-class">

<script type="text/javascript">

$(function() {
      $(".checkbox-js-trigger-class").on("change", function(){
          var new_val = $(this).is(':checked') ? 1 : 0;
          $(this).val(new_val);
      });
});
</script>

Бэкэнд:

Лучше всего использовать Форма модели :

class StudentUserMedicalRecordForm(ModelForm):
    class Meta:
        model = StudentUserMedicalRecord
        fields = ['Visual', 'Tuberculosis', 'Skin']
0 голосов
/ 01 ноября 2019

Входные данные флажков на самом деле немного странные и работают не так, как вы думаете.

Вам не нужен jQuery для обработки случая, когда флажок был изменен. Браузер и HTML обрабатывают это для вас. (Вроде того, как вам не нужно прослушивать нажатие клавиш, пока пользователь фокусируется на вводе type = "text", чтобы буквы отображались в текстовом поле.)

Вместо этого происходитесли пользователь установит флажок, у ввода будет атрибут с именем флажок. Это может выглядеть примерно так:

Тег ввода флажка также имеет два других атрибута name и value. Это то, что отправляется на сервер при отправке формы. НО он отправляет только пару имя-значение для отмеченных флажков! Для флажков, которые не отмечены, он ничего не отправляет. Поэтому, если у каждого флажка есть имя и значение, вы можете рассматривать его как пару ключ-значение. Если флажок установлен, он отправит ключ = значение на сервер. Вам разрешено иметь более одного значения для одного ключа, если вы указываете имя как имя массива.

Итак, представьте, что у вас есть такая форма:

<input type="checkbox" name="disease[]" value="tuberculosis" checked>
<input type="checkbox" name="disease[]" value="chickenpox" checked>
<input type="checkbox" name="disease[]" value="smallpox">
<input type="checkbox" name="needs_medicine" value="true" checked>
<input type="checkbox" name="recovered" value="whatevervalue">

Когда эта форма отправлена, сервер получит что-то, похожее на "болезнь = [туберкулез, ветряная оспа] & needs_medicine = true"

Обратите внимание, что оспа и выздоровление не упоминаются, потому что они не проверены. Также обратите внимание, что не очень важно то, что вы указали в качестве значения флажка, который не является флажком с множественным выбором (в этом примере needs_medicine), потому что значение, которое отправляется на сервер, всегда будет либо значением флажка (вв этом случае строка «true»).

0 голосов
/ 24 октября 2019

Поскольку у вас есть значение по умолчанию, заданное как "1" здесь

<input type="checkbox" value="1" name="Visual" id="visual">

А также нет элемента с id = "checkbox1" или id = "checkbox-value", на который есть ссылки в вашем скрипте.

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