在Django中保存外键相关表单

时间:2012-09-28 12:40:28

标签: django django-models django-forms django-templates

我的模特看起来像......

Student(models.Model):
    name = models.CharField(max_length = 60, blank = False)
    r_no = models.CharField(max_length = 60, blank = False)
    created_date = models.DateTimeField(null = False, blank = False, default = datetime.datetime.now())

StudentPotential(models.Model):
    aka_name = models.CharField(max_length = 60, blank = True)
    -----
    -----
StudentCorrespondence(models.Model):
    student = models.ForeignKey('Student', related_name = "Student_FK")
    student_p = models.ForeignKey('Student', related_name = "Student_FK")
    emailed_date = models.DateTimeField(null = True, blank = True)
    phoned_date = models.DateTimeField(null = True, blank = True)

my form in form.py

class StudentPotentialForm (forms.ModelForm):

    class Meta:
        model = StudentPotential

class StudentCorrespondenceForm(forms.ModelForm):
    class Meta:
        model = StudentCorrespondence
        exclude = ('student', 'student_p')

最后我的view.py

def add_student_company_potential(request, student_id):
    from cdradmin.forms import StudentPotentialForm, StudentCorrespondenceForm
    if request.method == 'POST':
            ### HOW TO SAVE THE two from for the student have its it 'student_id' ####

    else:

            StudentPotentialForm = StudentPotentialForm()
            StudentCorrespondenceForm = StudentCorrespondenceForm()
context = {'StudentCorrespondenceForm':StudentCorrespondenceForm, "StudentPotentialForm":StudentPotentialForm}
return render_to_response('cdradmin/studentform.html', context, context_instance = RequestContext(request))

一旦数据发布到视图中,我如何能够为学生保存此数据,他/她的ID是'student_id'

1 个答案:

答案 0 :(得分:3)

你可以试试这个

if request.method == 'POST':
    spf = StudentPotentialForm(request.POST)
    if spf.is_valid():
        osp = spf.save()
    else :
       #raise error

    student = Student.objects.get(id=student_id)
    scf = StudentCorrespondenceForm(request.POST)
    if scf.is_valid():
        osc = scf.save(commit=False)
        osc.student = student
        osc.student_p = osp
        osc.save()
    else:
        # raise error.