首页 > 解决方案 > 如何在 django 视图中使用 `commit=False` 来获取外键值?

问题描述

观点有趣:-


def save_all_form_at_once(request):
    if request.method == 'POST':  
        form1 = StudentForm( request.POST, prefix="form1")
        form2 = GradeForm( request.POST, prefix="form2")
        form3 = SemesterForm( request.POST, prefix="form3")
        form4 = CourseForm( request.POST, prefix="form4")       
        if all([form1.is_valid() , form2.is_valid() , form3.is_valid() , form4.is_valid()]):
            form1.save()
dont know how to get following values
            # new_course = form4.save(commit=False)
            # new_course.student_id = form1.get("enroll_no")
            # new_course.save()
            # new_sem = form3.save(commit=False)
            # new_sem.student_id = form1.get("enroll_no")
            # new_sem.course_id = new_course.get("id")
            # new_sem.save()
            # new_grade = form2.save(commit=False)
            # new_grade.Sem_Info_id = new_sem.get("id")
            # new_grade.Student_Name_id = form1.get("enroll_no")
            # new_grade.Subject_Info_id = new_course.get("id")
            # new_grade.save()

    else:
        form1 = StudentForm(prefix="form1")
        form2 = GradeForm(prefix="form2")
        form3 = SemesterForm(prefix="form3")
        form4 = CourseForm(prefix="form4")
        
    return render(request, 'add.html', {'form1' : form1, 
                                         'form2' : form2,
                                         'form3' : form3,
                                         'form4' : form4 } )             
                        
            


这是我的 models.py 文件,您可以看到我没有放入null=Flase任何 FK,因为我的数据库中需要它们。如何获取所有这些 FK 值并将它们保存到我的数据库中


class Grade(models.Model):
    id =                models.AutoField(primary_key=True)
    Student_Name =      models.ForeignKey(Student, on_delete=models.CASCADE)
    Subject_Info =      models.ForeignKey(Course, on_delete=models.CASCADE)
    Sem_Info =          models.ForeignKey(Semester, on_delete=models.CASCADE)   
    credit_th =         models.IntegerField(default=0)
    credit_pr =         models.IntegerField(default=0)
    marks_gain_th =     models.IntegerField(default=0)
    marks_gain_pr =     models.IntegerField(default=0)
    marks_gain_mt =     models.IntegerField(default=0)

    #calculated on database side
    total_marks =       models.IntegerField(default=0)  
    grade_point =       models.FloatField(default=0)  
    credit_point =      models.FloatField(default=0)

我需要所有 FK 值。并且不知道该怎么做!如果我做错了,请纠正我!

标签: pythondjangodjango-modelsdjango-views

解决方案


推荐阅读