Проблема с выводом оценок в таблицу Django
Я занимаюсь разработкой проекта электронного журнала. Я пытаюсь вывести оценки в таблицу, но они не отображаются. Пытался решить проблему с chatgpt, но ничего не помогает.
Код
Python
def marks(request):
# Проверка роли и получение текущей школы
checkschoolrole(request)
school = getcurrentschool(request)
# Получение параметров запроса
group = request.GET.get("group")
lessonname = request.GET.get("lesson")
lesson = lessonname
period = getcurrentperiod(request)[0]
# Получение расписания уроков
curs.execute("""
SELECT `dayid`, `date`
FROM `timetable`
WHERE `lessonname` = %s AND `groupname` = %s AND `period` = %s AND `school` = %s
ORDER BY `date` ASC
""", [lesson, group, period, school])
timetable_data = curs.fetchall() # Список кортежей (dayid, date)
if not timetable_data:
print("no timetable_data")
# Преобразуем данные расписания в список словарей для удобства
timetable = [{'dayid': row[0], 'date': row[1]} for row in timetable_data]
month_days = {
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"7": 0,
"8": 0,
"9": 0,
"10": 0,
"11": 0,
"12": 0
}
days_total = 0
for entry in timetable:
print(entry['date'].month)
month = datetime.date.strftime(entry['date'], "%#m")
month_days[month] += 1
days_total += 1
# Получение списка учеников
curs.execute("""
SELECT `fullname`
FROM `users`
WHERE `groupname` = %s AND `school` = %s AND `role` = 'Ученик'
ORDER BY `fullname`
""", [group, school])
students_data = curs.fetchall() # Список кортежей (studentname,)
if not students_data:
print("no students data")
students = [row[0] for row in students_data]
# Получение оценок учеников
curs.execute("""
SELECT `studentname`, `dayid`, `mark`
FROM `marks`
WHERE `lessonname` = %s AND `groupname` = %s AND `period` = %s AND `school` = %s ORDER BY `date` ASC
""", [lesson, group, period, school])
marks_data = curs.fetchall() # Список кортежей (studentname, dayid, mark)
if not marks_data:
print("no marks data")
print(marks_data)
# Построение словаря оценок: {studentname: {dayid: mark}}
marks_dict = {}
#for studentname, dayid, mark in marks_data:
# if studentname not in marks_dict:
# marks_dict[studentname] = {}
# marks_dict[studentname][dayid] = mark
for i in marks_data:
if i[0] not in marks_dict:
marks_dict[i[0]] = {}
marks_dict[i[0]][i[1]] = i[2]
# Построение таблицы данных для шаблона
table = []
for student in students:
student_row = {
'name': student,
'marks': [],
}
for lesson in timetable:
dayid = lesson['dayid']
# Получаем оценку ученика за конкретный урок
mark = marks_dict.get(student, {}).get(dayid, '') # Пустая строка, если оценки нет
student_row['marks'].append(mark)
table.append(student_row)
# Передача данных в шаблон
return render(request, "school/marks/index.html", context = {
"group": group,
"lesson": lesson,
"lessonname": lessonname,
"table": table,
"tt": timetable,
"month_days": month_days,
"days": days_total,
"period": period
})
HTML-шаблон (django)
<div class="journal">
<table>
<thead>
<tr style="height: 20px;;">
<th rowspan="2">Ученики</th>
{% for month, days in month_days.items %}
{% if days > 0 %}
<th colspan="{{ days }}">{{ month|get_month_by_number }}</th>
{% endif %}
{% endfor %}
</tr>
<tr>
{% for lesson in tt %}
{% now "Y-m-d" as today %}
<th class="{% if lesson.date|date:"Y-m-d" == today %}today{% endif %}">
{{ lesson.date|date:"d" }}
</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for student in table %}
<tr style="height: 20px;">
<td>{{ student.name }}</td>
<script>
console.log("{{ student.marks }}");
</script>
{% for mark, schedule in student.marks|zip:tt %}
{% if mark %}
<script>
console.log("yes mark");
</script>
<td class="marktd">
<input type="text" value="{{ mark }}"
data-date="{{ schedule.date }}"
data-dayid="{{ schedule.dayid }}"
data-student="{{ student.name }}"
data-period="{{ period }}"
data-group="{{ group }}">
</td>
{% else %}
<script>
console.log("no mark");
</script>
<td class="marktd">
<input type="text" value=""
data-date="{{ schedule.date }}"
data-dayid="{{ schedule.dayid }}"
data-student="{{ student.name }}"
data-period="{{ period }}"
data-group="{{ group }}">
</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
Структура таблиц
*NN - NOT NULL