Django - как передавать данные экземпляра объекта из одного представления в другое
Итак, я делаю цифровой школьный регистр в качестве проекта портфолио.
Здесь у меня есть одно представление: для учителя, со списком учеников в классе и рядом с ними их оценки. Я хотел сделать каждую оценку гиперссылкой, чтобы после щелчка на одной из них ее можно было редактировать, но мой код не передает данные оценки в следующее представление. Вот мой код:
views.py
@login_required
def class_detail(request):
school_class = get_object_or_404(SchoolClass, id=1)
semesters = school_class.school_year.semester_set.all()
students = school_class.students.all()
grades_1_sem = []
grades_2_sem = []
subject = Subject.objects.get(id=1)
for student in students:
grades_1_sem.append(student.grade_set.filter(school_year=school_class.school_year, semester=Semester.objects.get(number=1)))
grades_2_sem.append(student.grade_set.filter(school_year=school_class.school_year, semester=Semester.objects.get(number=2)))
students_grades_1_sem = list(zip(students, grades_1_sem))
students_grades_2_sem = list(zip(students, grades_2_sem))
return render(request, 'schoolregister/nauczyciel/klasa.html', {
'school_class': school_class, 'students': students,
'grades': grades, 'subject': subject,
'students_grades_1_sem': students_grades_1_sem,
'students_grades_2_sem': students_grades_2_sem,
})
def edit_grade(request):
if request.method == 'POST':
grade_to_edit = GradeToEdit(request.POST)
if grade_to_edit.is_valid():
grade_to_edit.save()
return HttpResponseRedirect('')
else:
return HttpResponse("Error.")
else:
grade_to_edit = GradeToEdit()
return render(request, 'schoolregister/edit_grade.html', {'grade_to_edit': grade_to_edit,})
forms.py
class GradeToEdit(forms.ModelForm):
class Meta:
model = Grade
fields = ('grade', 'school_year', 'semester', 'subject', 'student', 'description')
urls.py
urlpatterns = [
path('nauczyciel/<int:school_class_id>/<int:subject_id>/', views.class_detail,
name='class_detail'),
path('edit_grade/', views.edit_grade, name='edit_grade'),
]
Вот код с тегом href, который должен перейти к следующему представлению и передать данные, но он не передает данные для экземпляра Grade:
klasa.html
{% for semester in semesters %}
{% if semester.number == 1 %}
{% for student in students_grades_1_sem %}
<tr>
<td>{{ student.0 }}</td>
{% for grade in student.1 %}
<td><a href="{% url 'schoolregister:edit_grade' %}" value="{{ grade }}">{{ grade }}</a><br>
{{ grade.description }}<br>
</td>
{% endfor %}
Вместо заполненной формы - полностью пустая:
edit_grade.html
<form method="post">
{{ grade_to_edit.as_p }}
{% csrf_token %}
<p><input type="submit" value="Dodaj"></p>
</form>
Любые предложения будут полезны, спасибо!