如何将数据保存到数据库

时间:2020-02-06 18:24:16

标签: django django-models django-forms django-views

如何在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)

1 个答案:

答案 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})

'''