如何在AddGradeView(View)中发送给定学生的新成绩并将学科重定向到学生成绩?
forms.py
class AddGradeForm(forms.Form):
student = forms.CharField(label='Nazwisko')
subject = forms.CharField(label='Nazwa przedmiotu')
grade = forms.ChoiceField(label='Ocena', choices=GRADES)
views.py
class AddGradeView(View):
def get(self,request):
form = AddGradeForm()
return render(request, 'exercises/form.html', {'form':form})
def post(self,request):
form = AddGradeForm(request.POST)
if form.is_valid():
last_name, subject, grade = form.cleaned_data.values()
student = Student.objects.filter(last_name=last_name)
if not student:
return HttpResponse("Student doesnt exist!")
przedmiot = SchoolSubject.objects.filter(name=subject)
if not przedmiot:
return HttpResponse("Subject doesnt exist")
***如何为给定的学生发送新成绩,并将学科重定向到学生成绩?
new_grade, created=StudentGrades.objects.get_or_create(student=student, grade = grade, school_subject=przedmiot)
返回重定向(“学生”,pk = new_grade.pk)
else:
return render(request, 'exercises/form.html', {'form': form})
models.py
class SchoolSubject(models.Model):
name = models.CharField(max_length=64)
teacher_name = models.CharField(max_length=64)
def __str__(self):
return f"{self.name} {self.teacher_name}"
class Student(models.Model):
first_name = models.CharField(max_length=64)
last_name = models.CharField(max_length=64)
school_class = models.IntegerField(choices=SCHOOL_CLASS)
grades = models.ManyToManyField(SchoolSubject, through="StudentGrades")
year_of_birth = models.IntegerField()
@property
def name(self):
return "{} {}".format(self.first_name, self.last_name)
def __str__(self):
return self.name
class StudentGrades(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
school_subject = models.ForeignKey(SchoolSubject, on_delete=models.CASCADE)
grade = models.FloatField(choices=GRADES)
答案 0 :(得分:0)
这是我的问题的解决方案。
'''
class AddGradeView(View):
def get(self,request):
form = AddGradeForm()
return render(request, 'exercises/form.html', {'form':form})
def post(self,request):
form = AddGradeForm(request.POST)
if form.is_valid():
last_name, subject, grade = form.cleaned_data.values()
student = Student.objects.filter(last_name=last_name)
if len(student) == 0:
return HttpResponse("Student doesn exist")
student = student[0]
przedmiot = get_object_or_404(SchoolSubject, name=subject)
if not przedmiot:
return HttpResponse("Subject doesnt exist")
new_grade= StudentGrades.objects.get_or_create(student=student, grade = grade, school_subject=przedmiot)
return redirect('student', pk=student.pk)
else:
return render(request, 'exercises/form.html', {'form': form})
'''