【问题标题】:How to save data into database [closed]如何将数据保存到数据库中[关闭]
【发布时间】: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


    【解决方案1】:

    这是我的问题的解决方案。

    '''

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

    '''

    【讨论】:

      猜你喜欢
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 2013-11-26
      • 1970-01-01
      相关资源
      最近更新 更多