динамически отправлять форму при изменении значений python - PullRequest
0 голосов
/ 03 августа 2020

Я новичок в html и Django и пытаюсь сделать мои формы динамически автоматически отправляемыми всякий раз, когда пользователь меняет свои входы, по существу удаляя кнопку «Отправить».

Моя форма имеет 3 входа , (все числа с плавающей точкой), которые будут go через some_function () для вычисления. Но чтобы сэкономить время пользователя, хотелось бы динамику c. Следовательно, нет «отправить».

HTML:

    <div class="container">
          <h3>Calculator</h3>
          <form method="post" >
              {% csrf_token %}
              {{ form_c.as_p }}
              <button type="submit">Submit</button> # <- I would like to remove this
          </form>
    </div>

Мое представление ниже, если необходимо:

 def post(self, request):
        form_c = CalculatorForm(request.POST, prefix='form_c')
        try:
            if form_c.is_valid():
                post = form_c.cleaned_data
                val1 = float(post.get('val1'))
                val2 = float(post.get('val2'))
                val3 = float(post.get('val3'))
                numbers = some_function(val1, val2, val3)

        except:
            pass

        args = {
            'form_c': form_c, 'form_cols': numbers,
        }
        return render(request, self.template, args)

(EDIT) Формы:

class CalculatorForm(forms.Form):
    val1 = forms.DecimalField(decimal_places=2, min_value=0.0, required=False)
    val2 = forms.DecimalField(decimal_places=2, min_value=0.0, required=False)
    val3 = forms.DecimalField(decimal_places=2, min_value=0.0, required=False)

1 Ответ

1 голос
/ 03 августа 2020

Это позволит достичь того, что вы просите, самым простым способом. Хотя я его не тестировал, лог c есть. Вы можете создать функцию проверки и отправки в JS, а затем вызвать ее при изменении поля ввода с помощью атрибута onChange. Вам просто нужно добавить атрибут к вашим входным данным . Вы также можете просто добавить прослушиватели событий к своим входам или использовать jQuery, чтобы избавиться от атрибута onchange. Выбор за вами.

view.py

def post(self, request):
        form_c = CalculatorForm(request.POST, prefix='form_c')
        try:
            if form_c.is_valid():
                post = form_c.cleaned_data
                val1 = float(post.get('val1'))
                val2 = float(post.get('val2'))
                val3 = float(post.get('val3'))
                numbers = some_function(val1, val2, val3)

        except:
            pass

        args = {
            'form_c': form_c, 'form_cols': numbers,
        }
        return render(request, self.template, args)

HTML

<div class="container">
      <h3>Calculator</h3>
      <form method="post" id="myform" name="myform">
          {% csrf_token %}
          {{ form_c.as_p }}
      </form>
</div>

JavaScript

function validate_then_submit() {
    var valid = false;
    //validate form here
    if (valid == true) {
        document.forms['myform'].submit();
    }
}

forms.py

class fooForm(forms.Form):
    char_field = forms.CharField(widget=forms.TextInput(attrs={'onChange':'validate_then_submit()'}))

Однако я не думаю, что это хороший дизайн. Если форма отправляется, как только данные становятся «действительными», что, если произошла опечатка? Он забирает контроль у пользователя и действует неожиданным образом.

...