Динамическая форма Django для вызова roll

#python #django

#python #django

Вопрос:

Мне нужно создать форму с помощью django, чтобы проверить, являются ли учащиеся prensent или нет. Я не могу использовать «обычный» способ создания формы, потому что django хочет, чтобы модель формы была реализована со всеми полями, составляющими форму. Я не могу этого сделать, потому что я не знаю количество учеников в классе. как я могу создать динамическую форму, которая не заботится о количестве студентов?

в начале я создал форму в шаблоне с параметром for, чтобы показывать список студентов с каждым флажком

             <form method="post">
              {% csrf_token %}
              Date : <input id="date" type="date" class="mt-3 mb-3">
              <br>
              {% for student in student_list %}
                <input type="checkbox" id="student{{forloop.counter}}" name="student{{forloop.counter}}">
                <label for="student{{forloop.counter}}">{{student.first_name }} {{student.last_name}}</label>
                <br>
              {% endfor %}
              <button class="btn btn-outline-primary mr-4"><a href="/lycee/">Cancel</a></button>
              <button type="submit" class="btn btn-success radius d-flex">Submit</button>
            </form>
  

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

1. используйте inline_formset с вызывающим roll, имеющим возможность добавлять строку

Ответ №1:

Возможно, это не лучшая практика, но я думаю, что это должно сработать.

form.html

 <form method="POST">
    {% csrf_token %}
    Date : <input id="date" type="date" class="mt-3 mb-3">
    <br>
    {% for student in student_list %}
        <input type="checkbox" id="student" name="student" value="1">
        <label for="student">{{ student.first_name }} {{ student.last_name }}</label>
        <br>
     {% endfor %}
     <button class="btn btn-outline-primary mr-4"><a href="/lycee/">Cancel</a></button>
     <button type="submit" class="btn btn-success radius d-flex">Submit</button>
</form>
  

views.py

 def submit_form(request)
    if request.method == 'POST':
        date = request.POST.get("date")
        student = request.POST.getlist("student")
        # TODO
  

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

1. но как я могу получить статистику флажка?

2. Попробуйте добавить value="1" в `<тип ввода=»флажок»>. Я уже отредактировал сообщение. Дайте мне знать, работает это или нет.

3. request.POST.get("date") Работает нормально? Если нет, не могли бы вы, пожалуйста, обновить свой текущий код?

Ответ №2:

Редактировать :

Я просто назвал каждый флажок ‘student’, затем я получаю данные каждого флажка в view.py

call_of_roll.html

         <form method="post">
          {% csrf_token %}
          Date : <input name="date" type="date" class="mt-3 mb-3" value="{{defaultdate|date:"Y-m-d" }}" required>
          <br>
          {% for student in student_list %}
            <input type="checkbox" id="{{student.id}}" name="student{{student.id}}" checked>
            <label for="student{{student.id}}">{{student.first_name }} {{student.last_name}}</label>
            <br>
          {% endfor %}
          <p>Check if the student is present</p>
          <div class="row">
            <button class="btn btn-outline-primary mr-4"><a href="/lycee/">Cancel</a></button>
            <button type="submit" class="btn btn-success radius d-flex">Submit</button>
          </div>
        </form>
  

views.py

 if request.method == 'POST':
    date = request.POST.get("date")
    for student in students:
      missing = request.POST.get('student' str(student.id), "off")