Как добавить данные в базу данных в цикле из нескольких текстовых полей в шаблоне? - PullRequest
0 голосов
/ 04 апреля 2019

Я должен ввести оценки, полученные всеми учениками в классе.Поэтому я создал шаблон с текстовым полем для хранения меток, соответствующих каждому номеру рулона.Идентификатором каждого текстового поля является номер броска соответствующего учащегося.

Как передать эти отметки из каждого поля в views.py, чтобы они могли быть сохранены в базе данных?

Я пытался использовать Javascript, но я не знаю, как получить доступ к таблице в базе данных (класс по моделям), чтобы извлечь номер броска каждого учащегося и получить доступ к текстовому полю.

models.py

class MarksForm(forms.Form):

    exam_type = forms.CharField(label='Exam Name', widget=forms.Select(choices=EXAM_TYPES))
    entered_marks = forms.FloatField(label='Marks', required=True)

    def clean(self):
        examtype = self.cleaned_data.get("exam_type")
        enteredmarks = self.cleaned_data.get("entered_marks")
        return self.cleaned_data

views.py

    @csrf_protect
    @login_required
    def edit_marks(request, course_code):
        print ('Inside Views')
        user = request.user
        extrainfo = ExtraInfo.objects.get(user=user)

        if extrainfo.user_type == 'faculty':
            instructor = Curriculum_Instructor.objects.filter(instructor_id=extrainfo)

            for ins in instructor:
                if ins.curriculum_id.course_code == course_code:
                    registered_students = Register.objects.filter(curr_id = ins.curriculum_id.curriculum_id)

            for reg in registered_students:
                identity = Register.objects.get(student_id=reg.student_id, curr_id=curriculum[0])
                m_id = identity.r_id
                student_marks = 'enteredmarks'+identity.student_id
                score = request.POST.get(studentmarks)
                exam = request.POST.get('examtype')

                Marks.objects.create(
                    mid=m_id,
                    exam_type=exam,
                    marks=score
                    )

        context= {'registered_students': registered_students }

        return render(request, 'coursemanagement/viewperformance.html', context)

urls.py

urlpatterns = [

    url(r'^$', views.viewcourses, name='viewcourses'),
    url(r'^(?P<course_code>[A-z]+[0-9]+[A-z]?)/$', views.course, name='course'),
    url(r'^(?P<course_code>[A-z]+[0-9]+[A-z]?)/edit_marks$', views.edit_marks, name='edit_marks'),

viewperformance.html

{% load static %}
{% block viewperformance %}

<div>
  <form class="ui large form" id="entermarks" method="POST">  {% csrf_token %}

    <select name="examtype" id = "examtype" style="width: 100px">
      <option value = "1">Quiz 1</option>
      <option value = "2">Quiz 2</option>
      <option value = "3">Mid Sem</option>
      <option value = "4">End sem</option>
    </select>

    <table class="ui very basic collapsing celled table">
      <thead>
        <tr>
          <th>Students</th>
        </tr>
      </thead>

      <tbody>
        {% for x in registered_students %}
          <tr>
            <td>
              <div class="content">
                <p style="text-align:center">{{x.student_id}}</p>
                var student = x.student_id;
              </div>
            </td>
            <td>
              <input type="number" id="enteredmarks{{x.student_id}}" required="true" />
            </td>
          </tr>

        {% endfor %}
      </tbody>
    </table>
    <input type="submit" class="ui primary button" id="submit_marks" value="Upload" href="/ocms/{{course.course_id}}/edit_marks"/>

  </form>
</div>
{% endblock %}```

When I try to print something inside view.py, it does not appear. Why is html not getting linked to its corresponding view(edit_marks)?

1 Ответ

0 голосов
/ 04 апреля 2019

Лучший способ сделать это в Django - использовать Django Formset

Форма набора - это уровень абстракции для работы с несколькими формами на одной странице. Какое ваше требование.

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