Django:具有多个foriegn kays的复杂内联formset

时间:2016-04-18 23:27:09

标签: django-forms django-templates django-views

我正在开展一个申请人可以申请多个申请的项目。的 Models.py:

class StudentCandidateApplication(models.Model):
    login_email = models.ForeignKey(User,related_name='%(class)s_requests_created_5')  
    first_name = models.CharField( max_length=20,) 
    middle_name = models.CharField(max_length=20, blank=True, null=True)  
    last_name = models.CharField(max_length=20,blank=True, null=True) 
    gender = models.CharField(max_length=10,blank=True, null=True)  
    # date_of_birth = models.DateField(blank=True, null=True)  
    address_line_1 = models.CharField( max_length=60,blank=True, null=True) 
    address_line_2 = models.CharField( max_length=40, blank=True, null=True)
    address_line_3 = models.CharField( max_length=40, blank=True, null=True)
    city = models.CharField(max_length=20,blank=True, null=True)  
    state = models.CharField(max_length=20,blank=True, null=True)  
    country = models.CharField(max_length=20,blank=True, null=True)  
    application_status = models.CharField(max_length=20,blank=True, null=True) 
    current_organization = models.CharField(max_length=50, blank=True, null=True)  
    program = models.ForeignKey(Program,related_name='%(class)s_requests_created_6',blank=True, null=True)  
    current_location = models.ForeignKey(Location,  related_name='%(class)s_requests_created_7',related_query_name='%(class)s_requests_created_7s',blank=True, null=True)  
    fathers_name = models.CharField( max_length=100,blank=True, null=True)  
    mothers_name = models.CharField( max_length=100,blank=True, null=True)  
    nationality = models.CharField( max_length=15,blank=True, null=True)  
    phone = models.IntegerField( blank=True, null=True)  
    mobile = models.IntegerField(blank=True, null=True)  
    email_id = models.CharField(max_length=50,blank=True, null=True)  
    current_employment_status = models.CharField( max_length=20,blank=True, null=True)  
    employer_consent_flag = models.IntegerField(blank=True, null=True) 
    employer_mentor_flag = models.IntegerField(blank=True, null=True) 
    current_org_employee_number = models.CharField( max_length=15, blank=True, null=True)  
    current_designation = models.CharField( max_length=30,blank=True, null=True)  
    fee_payment_owner = models.CharField( max_length=20, blank=True, null=True) 
    current_org_industry = models.ForeignKey(Industry, related_name='%(class)s_requests_created_8',blank=True, null=True)  
    # current_org_employment_date = models.DateTimeField(blank=True, null=True)  
    work_location = models.ForeignKey(Location, related_name='%(class)s_requests_created_109',related_query_name='%(class)s_requests_created_7s1',blank=True, null=True)  
    exam_location = models.ForeignKey(Location, related_name='%(class)s_requests_created_101',related_query_name='%(class)s_requests_created_7s2',blank=True, null=True)  
    total_work_experience_in_months = models.IntegerField( blank=True, null=True) 
    math_proficiency_level = models.CharField(max_length=45, blank=True, null=True)  
    prior_student_flag = models.IntegerField(blank=True, null=True) 
    bits_student_id = models.CharField( max_length=15, blank=True, null=True) 
    parallel_studies_flag = models.IntegerField(blank=True, null=True)  
    bonafide_flag = models.IntegerField(blank=True, null=True) 
    # created_on_datetime = models.DateTimeField(blank=True, null=True)  
    # last_updated_on_datetime = models.DateTimeField(blank=True, 

class StudentCandidateQualification(models.Model):
    application = models.ForeignKey(StudentCandidateApplication,related_name='%(class)s_requests_created_12')  
    school_college = models.CharField(max_length=45, blank=True, null=True)  
    duration = models.IntegerField(blank=True, null=True)  
    percentage_marks_cgpa = models.DecimalField( max_digits=10, decimal_places=2, blank=True, null=True) 
    completion_year = models.IntegerField( blank=True, null=True)  
    division = models.CharField( max_length=10, blank=True, null=True) 
    degree = models.ForeignKey(Degree,  related_name='%(class)s_requests_created_13',blank=True, null=True)  
    discipline = models.ForeignKey(Discpline,  related_name='%(class)s_requests_created_14',blank=True, null=True)  

    def __unicode__(self):
        return self.school_college


class StudentCandidateWorkExperience(models.Model):
    application = models.ForeignKey(StudentCandidateApplication,related_name='%(class)s_requests_created_15') 
    organization = models.CharField(max_length=50,blank=True, null=True)  
    # start_date = models.DateTimeField(blank=True, null=True)  
    # end_date = models.DateTimeField(blank=True, null=True)  
    designations = models.CharField( max_length=100,blank=True, null=True)  

    def __unicode__(self):
        return self.organization

Views.py:

@login_required
def ApplicationForm(request):
    StudentFormset=inlineformset_factory(User, StudentCandidateApplication,exclude=('application_status',
        'bonafide_flag','parallel_studies_flag'),max_num=1, extra=1,validate_max=True,can_delete=True)
    QualificationFormset=modelformset_factory(StudentCandidateQualification,
        exclude=('application',),validate_max=True,can_delete=True)
    ExpFormset=modelformset_factory(StudentCandidateWorkExperience,
        exclude=('application',),validate_max=True,can_delete=True)

    if request.method =='POST':
        try:
            studentFormset=StudentFormset(request.POST,instance=request.user)
            qualificationFormset=QualificationFormset(request.POST)
            expFormset=ExpFormset(request.POST)
        except ValidationError:
            studentFormset=None
            qualificationFormset=None
            expFormset=None
        print studentFormset.is_valid() , qualificationFormset.is_valid() , expFormset.is_valid()
        if studentFormset.is_valid() and qualificationFormset.is_valid() and expFormset.is_valid():
            studentFormset.save()
            applicant=StudentCandidateApplication.objects.get(login_email=request.user)
            qlist =[]
            elist=[]

            for form in qualificationFormset:
                qForm=form.save(commit=False)
                qForm.application=applicant
                qlist.append(qForm)


            for form in expFormset:
                eForm=form.save(commit=False)
                eForm.application=applicant
                elist.append(eForm)
            print qlist,elist
            StudentCandidateQualification.objects.bulk_create(qlist)
            StudentCandidateWorkExperience.objects.bulk_create(elist)

            return HttpResponseRedirect('/admin/')
    else:
        studentFormset=StudentFormset(instance=request.user)
        qualificationFormset=QualificationFormset()
        expFormset=ExpFormset()
    return render(request,'application_form.html',{'studentFormset':studentFormset,
        'qualificationFormset':qualificationFormset,
        'expFormset':ExpFormset,


        })

当我尝试存储多个教育和体验详细信息时,它只会插入第一条记录。

0 个答案:

没有答案