【发布时间】:2020-02-06 18:24:16
【问题描述】:
如何在 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)
return redirect('student', 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)
【问题讨论】:
标签: django django-models django-forms django-views