Django l oop в html выпуске - PullRequest
0 голосов
/ 22 февраля 2020

я пытался решить эту проблему почти 3 часа, но я не получил желаемый результат,

это результат, который я хочу

enter image description here

это мой текущий результат

enter image description here

это мой html

 <table  id="blacklistgrid" border="2px">
     <tr>
         <th>Students Name</th>
         {% for student in teacherStudents %}<th >{{student.Date}}</th>{% endfor %}
         <th data-id='headers' id='headerave'>Average</th>
                 </tr>
     <tr>
    <tbody id="scoreboard">
    {% for students in studentname %}
    <tr class="tr2">
        <td><input type="text" name="students" value="{{student.id}}" id="student" hidden>{{students.Students_Enrollment_Records.Students_Enrollment_Records.Student_Users}}</td>
     <tr>
      {% endfor %}
     </tr>
      <tr>
          {% for studentss in Students %}
           <td class="td" scope="row"><input type="text" name="students" value="{{student.id}}" id="student" hidden>{{studentss.Grade}}</td>{% endfor %}
           <td data-id='row' id="ans"><input type='number' class='averages' step="any" name="average" readonly/></td>
       </tr>
         </tbody>
    </table>

это мои views.py

teacherStudents = studentsEnrolledSubjectsGrade.objects.filter(Teacher = teacher).filter(grading_Period = period).filter(Subjects = subject).filter(Grading_Categories = category).filter(GradeLevel = grade).distinct('Date')
studentname = studentsEnrolledSubjectsGrade.objects.filter(Teacher = teacher).filter(grading_Period = period).filter(Subjects = subject).filter(Grading_Categories = category).filter(GradeLevel = grade).distinct('Students_Enrollment_Records')
Students = studentsEnrolledSubjectsGrade.objects.filter(Teacher = teacher).filter(grading_Period = period).filter(Subjects = subject).filter(Grading_Categories = category).filter(GradeLevel = grade)
return render(request, 'Homepage/period.html',{"teacherStudents":teacherStudents,"Students":Students,"studentname":studentname})

мои models.py

class studentsEnrolledSubjectsGrade(models.Model):
    Teacher = models.ForeignKey(EmployeeUser, related_name='+', on_delete=models.CASCADE,
                                                null=True,blank=True)
    GradeLevel = models.ForeignKey(EducationLevel, related_name='+', on_delete=models.CASCADE,
                                                null=True,blank=True)
    Subjects = models.ForeignKey(Subject, related_name='+', on_delete=models.CASCADE, null=True)
    Students_Enrollment_Records = models.ForeignKey(StudentsEnrolledSubject, related_name='+',
                                                    on_delete=models.CASCADE, null=True)
    Grading_Categories = models.ForeignKey(gradingCategories, related_name='+', on_delete=models.CASCADE,
                                                null=True,blank=True)
    grading_Period = models.ForeignKey(gradingPeriod, related_name='+', on_delete=models.CASCADE,
                                                null=True,blank=True)
    #Items = models.IntegerField(blank=True, null=True)
    Date = models.DateField(null=True, blank=True)
    Grade = models.FloatField(null=True, blank=True)

это мои данные в admin.py

enter image description here

вы, ребята, можете помочь мне в моем html l oop? Есть ли у вас предложения? моя база данных postgresql

ОБНОВЛЕНИЕ, как сказал г-н @Chris в разделе комментариев, я хочу создать таблицу со строкой на каждого учащегося и в столбцах оценки на определенную дату c, Создайте таблицу в своем представлении (например, в виде списка списков или одного аннотированного набора запросов) и используйте шаблон для рендеринга , но я не знаю как, пожалуйста, помогите мне, ребята,

1 Ответ

0 голосов
/ 22 февраля 2020

Я бы предложил сгенерировать таблицу в вашем представлении и передать ее в ваш шаблон для рендеринга.

#views.py

def your_view(request):

    students = StudentsEnrolledSubjectsGrade.objects.filter(put_in_your_filters).order_by('student_name', 'date').values('student_name', 'date', 'grade')
    dates = list(students.values_list('date', flat=True).distinct().order_by('date'))

    # table basics
    table = []
    student_name = None
    table_row = None
    columns = len(dates) + 1

    # table header
    table_header = ['Student Name']
    table_header.extend(dates)
    table.append(table_header)

    for student in students:
        if not student['student_name'] == student_name:
            if not table_row is None:
                table.append(table_row)
            table_row = [None for d in range(columns)]
            student_name = student['student_name'] 
            table_row[0] = student_name

        table_row[dates.index(student['date']) + 1] = student['grade']

    table.append(table_row)

    return render(request, 'my_template.html', {'table': table})

Затем вы можете просмотреть все строки этой таблицы в вашем шаблоне:

<table  id="blacklistgrid" border="2px">
    <tr>
        {% for v in table.0 %}
        <td>{{ v }}</td>
        {% endfor %}
    </tr>

    <tbody>
    {% for row in table|slice:"1:" %}
        <tr>
            <td>{{ row.0 }}</td>
            {% for c in row|slice:"1:" %}
            <td>{{ c }}</td>
            {% endfor %}
        </tr>
     {% endfor %}

    </tbody>
</table>

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

...