Django — Как применить onlivechange к CharField / IntegerField

#django #django-models #django-forms #django-views

#django #django-модели #django-формы #django-просмотры

Вопрос:

Я хочу скрыть поле form.name_of_parent_if_minor, если возраст (CharField) <18 еще отображается. Я не понимаю, куда писать код jQuery или JS или добавлять отдельный файл js. Для этого мне нужно добавить определение html и добавить тег для age (CharField), или мы также можем выполнить действие над этим.

Я новичок в Django, поэтому, если вы обнаружите какие-либо ошибки в моем коде, буду признателен за любую помощь.

forms.py

 class StudentDetailsForm(forms.ModelForm):
     class Meta:
         model = StudentDetails
  

views.py

 class StudentCreateView(LoginRequiredMixin, CreateView):
    template_name = 'student/student_details_form.html'
    model = StudentDetails
    form_class = StudentDetailsForm
    success_url = "/"
  

HTML

 {% extends 'student/base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div id="idParentAccordian" class="content-section">
    <form method="POST">
        {% csrf_token %}

        <div class="card mt-3">
            <div class="card-header">
                <a class="collapsed card-link" style="display: block;" data-toggle="collapse"
                    href="#idPersonalInformation">Personal Information</a>
            </div>
            <div id="idPersonalInformation" class="collapse show" data-parent="#idParentAccordian">
                <div class="card-body">
                    <div class="row">
                        <div class="col-6">
                            {{ form.joining_date|as_crispy_field }}
                        </div>
                        <div class="col-6">
                            {{ form.class|as_crispy_field }}
                        </div>
                    </div>
                    {{ form.student_name|as_crispy_field }}
                    {{ form.father_name|as_crispy_field }}
                    {{ form.mother_name|as_crispy_field }}
                    {{ form.gender|as_crispy_field }}
                    <div class="row">
                        <div class="col-6">
                            {{ form.date_of_birth|as_crispy_field }}
                        </div>
                        <div class="col-6">
                            {{ form.age|as_crispy_field }}
                        </div>
                    </div>
                    <div>
                        {{ form.name_of_parent_if_minor|as_crispy_field }}
                    </div>
                </div>
            </div>
        </div>
        <div class="form-group mt-3">
            <button class="btn btn-outline-info" type="submit">Save</button>
            <a class="btn btn-outline-secondary" href="javascript:history.go(-1)">Cancel</a>
        </div>
    </form>
</div>
{% endblock content %}
  

Ответ №1:

самый простой, но не самый чистый способ — добавить JS-скрипт в ваш html

рекомендуемый способ — добавить статическую папку в ваше приложение и загрузить статические файлы в ваш html-шаблон, используя {% load static %}

Комментарии:

1. Мне нужно передать введенный параметр в функцию. В этом случае, как этого добиться, поскольку я использую теги crispy.