class AssessmentForm(forms.Form): assessment_id = forms.CharField(required=False) begindate = forms.DateField( required=True, input_formats=[ '%Y-%m-%d', ], error_messages={'invalid': u'请输入正确格式的日期(年-月-日)'}) enddate = forms.DateField(required=True, input_formats=[ '%Y-%m-%d', ], error_messages={'invalid': u'请输入正确格式的日期(年-月-日)'}) term = TermField(required=True) excellent = forms.IntegerField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'必须为数字', 'max_value': u'最大为100', 'min_value': u'最小为0' }) good = forms.IntegerField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'必须为数字', 'max_value': u'最大为100', 'min_value': u'最小为0' }) ordinary = forms.IntegerField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'必须为数字', 'max_value': u'最大为100', 'min_value': u'最小为0' }) def clean_assessment_id(self): if self.get_id(): try: Assessment.objects.get(id=self.get_id()) except Assessment.DoesNotExist: raise forms.ValidationError(u'非法数据') return self.get_id() def clean_term(self): if not self.get_id(): try: Assessment.objects.get(term=self.cleaned_data['term']) except Assessment.DoesNotExist: return self.cleaned_data['term'] raise forms.ValidationError(u'改学期已经存在') else: try: assessment = Assessment.objects.get(id=self.get_id()) try: oterm = assessment.term Assessment.objects.exclude(term=oterm).get( term=self.cleaned_data['term']) raise forms.ValidationError(u'该学期已经存在') except Assessment.DoesNotExist: return self.cleaned_data['term'] except Assessment.DoesNotExist: raise forms.ValidationError(u'非法数据') #return self.cleaned_data['term'] def clean_enddate(self): if self.cleaned_data['enddate'] < self.cleaned_data['begindate']: raise forms.ValidationError(u'开始日期必须小于结束日期') return self.cleaned_data['enddate'] def clean_ordinary(self): if self.cleaned_data['excellent'] + self.cleaned_data[ 'good'] + self.cleaned_data['ordinary'] != 100: raise forms.ValidationError(u'优良中比例和必须为100') return self.cleaned_data['ordinary'] def get_id(self): return self.cleaned_data['assessment_id'] def save(self, commit=True): newassessment = Assessment(begindate=self.cleaned_data['begindate'], enddate=self.cleaned_data['enddate'], term=self.cleaned_data['term'], excellent=self.cleaned_data['excellent'], good=self.cleaned_data['good'], ordinary=self.cleaned_data['ordinary']) if commit: newassessment.save() #产生行评价记录,后续考虑性能优化 for i in Class.objects.all(): for student in i.student_set.all(): newassessmentRow = AssessmentRow(assessment=newassessment, student=student, excellent=0, good=0, ordinary=0) newassessmentRow.save() return newassessment def update(self): assessment = Assessment.objects.get(id=self.get_id()) assessment.begindate = self.cleaned_data['begindate'] assessment.enddate = self.cleaned_data['enddate'] assessment.term = self.cleaned_data['term'] assessment.excellent = self.cleaned_data['excellent'] assessment.good = self.cleaned_data['good'] assessment.ordinary = self.cleaned_data['ordinary'] assessment.save()
class Comperformance_SetupForm(forms.Form): comperformance_setup_id = forms.CharField(required=False) term = TermField(required=True) moral = forms.FloatField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'互评最高分为数字', 'max_value': u'互评最高分最大为100', 'min_value': u'互评最高分最小为0', }) behaviorup = forms.FloatField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'日常行为最高分为数字', 'max_value': u'日常行为最高分最大为100', 'min_value': u'日常行为最高分最小为0', }) physical = forms.FloatField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'体能分为数字', 'max_value': u'体能分最大为100', 'min_value': u'体能分最小为0', }) excellent = forms.FloatField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'优分数为数字', 'max_value': u'优分数最大为100', 'min_value': u'优分数最小为0' }) good = forms.FloatField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'良分数为数字', 'max_value': u'良分数最大为100', 'min_value': u'良分数最小为0' }) ordinary = forms.FloatField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'中分数为数字', 'max_value': u'中分数最大为100', 'min_value': u'中分数最小为0' }) development = forms.FloatField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'单项最高分为数字', 'max_value': u'单项最高分最大为100', 'min_value': u'单项最高分最小为0' }) behavior = forms.FloatField(required=True, max_value=100, min_value=0, error_messages={ 'invalid': u'日常行为分基础分为数字', 'max_value': u'日常行为分基础分最大为100', 'min_value': u'日常行为分基础分最小为0' }) def clean_comperformance_setup_id(self): if self.get_id(): try: Comperformance.objects.get(id=self.get_id()) except Comperformance.DoesNotExist: raise forms.ValidationError(u'非法数据') return self.get_id() def clean_physical(self): if self.cleaned_data['moral'] + self.cleaned_data[ 'behaviorup'] + self.cleaned_data['physical'] != 100: raise forms.ValidationError(u'互评最高分、日常行为最高分、体能分数之和必须为100') return self.cleaned_data['physical'] def clean_term(self): if not self.get_id(): try: Comperformance.objects.get(term=self.cleaned_data['term']) except Comperformance.DoesNotExist: return self.cleaned_data['term'] raise forms.ValidationError(u'该学期已经存在') else: try: comperformance = Comperformance.objects.get(id=self.get_id()) try: oterm = comperformance.term Comperformance.objects.exclude(term=oterm).get( term=self.cleaned_data['term']) raise forms.ValidatorError(u'该学期已经存在') except Comperformance.DoesNotExist: return self.cleaned_data['term'] except Comperformance.DoesNotExist: raise forms.ValidationError(u'非法数据') def get_id(self): return self.cleaned_data['comperformance_setup_id'] def save(self, commit=True): newcomperformance = Comperformance( excellent=self.cleaned_data['excellent'], good=self.cleaned_data['good'], ordinary=self.cleaned_data['ordinary'], physical=self.cleaned_data['physical'], behavior=self.cleaned_data['physical'], development=self.cleaned_data['development'], moral=self.cleaned_data['moral'], behaviorup=self.cleaned_data['behaviorup'], term=self.cleaned_data['term']) if commit: newcomperformance.save() for i in Class.objects.all(): studentnum = i.student_set.count() for student in i.student_set.all(): try: assessmentrow = AssessmentRow.objects.filter( assessment__term=newcomperformance.term).get( student__id=student.id) assessmentscore = round((assessmentrow.excellent*newcomperformance.excellent + assessmentrow.good*newcomperformance.good + \ assessmentrow.ordinary*newcomperformance.ordinary)/studentnum, 2) except AssessmentRow.DoesNotExist, e: assessmentscore = 0 traceback.print_stack() traceback.print_exc() print e try: grade = Grade.objects.filter( term=newcomperformance.term).get( student__id=student.id) gradescore = grade.score except Grade.DoesNotExist, e: gradescore = 0 traceback.print_stack() traceback.print_exc() print e behavior = newcomperformance.behavior comperformancescore = assessmentscore * 0.3 + gradescore * 0.7 + behavior * 0.3 newcomperformancescore = ComperformanceScore( student=student, comperformance=newcomperformance, score=comperformancescore, assessmentscore=assessmentscore) newcomperformancescore.save()
class AssessmentForm(forms.Form): assessment_id = forms.CharField(required=False) begindate = forms.DateField(required=True,input_formats=['%Y-%m-%d',],error_messages={'invalid':'请输入正确格式的日期'}) enddate = forms.DateField(required=True,input_formats=['%Y-%m-%d',],error_messages={'invalid':'请输入正确格式的日期'}) term = TermField(required=True) excellent = forms.IntegerField(required=True,max_value=100,min_value=0,error_messages={ 'invalid':'请输入数字', 'max_value':'优最大为100', 'min_value':'优最小为0'}) good = forms.IntegerField(required=True,max_value=100,min_value=0,error_messages={ 'invalid':'请输入数字', 'max_value':'良最大为100', 'min_value':'良最小为0'}) ordinary = forms.IntegerField(required=True,max_value=100,min_value=0,error_messages={ 'invalid':'请输入数字', 'max_value':'中最大为100', 'min_value':'中最小为0'}) def clean_assessment_id(self): if self.get_id(): try: Assessment.objects.get(id = self.get_id()) except Assessment.DoesNotExist: raise forms.ValidationError(u"请不要非法提交数据") return self.get_id() return self.get_id() def clean_term(self): if not self.get_id(): try: Assessment.objects.get(term = self.cleaned_data['term']) except Assessment.DoesNotExist: return self.cleaned_data['term'] raise forms.ValidationError(u"该学期已经存在") else: try: assessment = Assessment.objects.get(id = self.get_id()) try: oterm = assessment.term Assessment.objects.exclude(term=oterm).get(term=self.cleaned_data['term']) raise forms.ValidationError(u"该学期已经存在") except Assessment.DoesNotExist: return self.cleaned_data['term'] except Assessment.DoesNotExist: raise forms.ValidationError(u"请不要非法提交数据") return self.cleaned_data['term'] def clean_enddate(self): if self.cleaned_data['enddate'] < self.cleaned_data['begindate']: raise forms.ValidationError(u"开始日期必须小于结束日期") return self.cleaned_data['enddate'] def clean_ordinary(self): if self.cleaned_data['excellent'] + self.cleaned_data['good'] + self.cleaned_data['ordinary'] != 100: raise forms.ValidationError(u"优良中之和必须为100") return self.cleaned_data['ordinary'] def get_id(self): return self.cleaned_data['assessment_id'] def save(self,commit=True): newassessment = Assessment(begindate=self.cleaned_data['begindate'],\ enddate=self.cleaned_data['enddate'],term=self.cleaned_data['term'],\ excellent=self.cleaned_data['excellent'],good=self.cleaned_data['good'],\ ordinary=self.cleaned_data['ordinary']) if commit: newassessment.save() #generate the records for i in Class.objects.all(): for student in i.student_set.all(): for exstudent in i.student_set.all(): newAssessmentRecord = AssessmentRecord(assessment=newassessment,\ ostudent=student,dstudent=exstudent,\ result='3')#'3'------>'无' newAssessmentRecord.save() #generate rows for i in Class.objects.all(): for student in i.student_set.all(): newAssessmentRow = AssessmentRow(assessment=newassessment,student=student,\ excellent=0,good=0,ordinary=0) newAssessmentRow.save() return newassessment def update(self): assessment = Assessment.objects.get(id = self.get_id()) assessment.begindate = self.cleaned_data['begindate'] assessment.enddate = self.cleaned_data['enddate'] assessment.term = self.cleaned_data['term'] assessment.excellent = self.cleaned_data['excellent'] assessment.good = self.cleaned_data['good'] assessment.ordinary = self.cleaned_data['ordinary'] assessment.save()