赞
踩
涉及技术:
后台:Django mysql
前端:Html css js Ajax boostrap
数据库:MySQL5.7
管理系统使用Xadmin框架,内置Bootstrap3、插件库
class Administrator(AbstractUser): """管理人员""" id = models.AutoField(verbose_name='管理人员编号', db_column='管理员编号', primary_key=True) username = models.CharField(max_length=150, verbose_name='用户名', db_column='用户名', unique=True) password = models.CharField(max_length=128, verbose_name='密码', db_column='密码') email = models.EmailField(verbose_name='邮箱', db_column='邮箱', null=True, blank=True) add_time = models.DateTimeField(default=datetime.now, db_column='添加时间', verbose_name="添加时间") remark = models.TextField(max_length=100, verbose_name='备注', db_column='备注', default='', null=True , blank=True, help_text='备注不超过一百个汉字', error_messages={ 'max_length': '备注不超过一百个字' }) class Meta: verbose_name = '管理人员' verbose_name_plural = verbose_name db_table = '管理人员表' def __str__(self): return self.username class EmailVerifyRecord(models.Model): """邮箱验证码""" SEND_CHOICES = ( ("register", "注册"), ("forget", "找回密码"), ("update_email", "修改邮箱") ) code = models.CharField(max_length=50, verbose_name="验证码", db_column='验证码') email = models.EmailField(max_length=50, verbose_name="邮箱", db_column='邮箱') send_type = models.CharField(choices=SEND_CHOICES, max_length=20, verbose_name="发送类型", db_column='验证码类型') send_time = models.DateTimeField(default=datetime.now, verbose_name="发送时间", db_column='发送时间') # 将now()中的括号去掉保证默认时间是models实例化的时间,而不是编译时间 class Meta: verbose_name = "邮箱验证码" verbose_name_plural = verbose_name db_table = '验证码表' def __str__(self): return self.code class DormitoryInfo(models.Model): """宿舍信息""" dormitory_number = models.CharField(max_length=5, db_column='寝室号', verbose_name='寝室号', default='001') year = models.CharField(max_length=10, db_column='年份', default='2018', verbose_name='年份',) teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, null=True, verbose_name='老师档案号', db_column='老师档案号') remark = models.TextField(max_length=100, verbose_name='备注', db_column='备注', help_text='备注不超过一百个汉字', null=True, blank=True, error_messages={ 'max_length': '备注不超过一百个字' }) class Meta: verbose_name = '宿舍' verbose_name_plural = verbose_name # ordering = ['year', 'dormitory_number'] db_table = '宿舍信息表' # unique_together = ['dormitory_number', 'year'] def __str__(self): return "{0}年入住,宿舍号:{1}".format(self.year, self.dormitory_number) def get_dormitory_students(self): students_list = self.studentinfo_set.all() students_list = ','.join([i.student_name for i in students_list]) return students_list get_dormitory_students.short_description = '宿舍学生' def get_student_number(self): num = self.studentinfo_set.all().count() return num get_student_number.short_description = '宿舍当前人数' class GradeInfo(models.Model): """年级信息""" grade_number = models.CharField(max_length=2, db_column='年级', verbose_name='年级', default='1') year = models.CharField(max_length=10, db_column='届', verbose_name='届', default='2018', unique=True, help_text='学生入学年份') header = models.CharField(max_length=10, db_column='年级主任', verbose_name='年级主任', default='', null=True, blank=True) remark = models.TextField(max_length=100, verbose_name='备注', db_column='备注', default='', null=True, blank=True, help_text='备注不超过一百个汉字', error_messages={ 'max_length': '备注不超过一百个字' }) class Meta: verbose_name = '年级信息' verbose_name_plural = verbose_name db_table = '年级信息表' # unique_together = ['grade_number', 'year'] # ordering = ['-year', 'grade_number'] # datetime.time 对象不可序列化 def __str__(self): year_now = date.today().year month_now = date.today().month # 计算出年级,但是为防止转校生,没有动态的加载到数据库 if month_now >= 9 and year_now >= int(self.year): grade = year_now - int(self.year) + 1 elif month_now < 9 and year_now >= int(self.year): grade = year_now - int(self.year) else: grade = int(self.grade_number) # 如果学生的年级大于三年级,则显示已经毕业 if grade > 3: return '{0}届入学, 目前已毕业'.format(self.year) else: return '{0}届入学, 目前{1}年级'.format(self.year, grade) def save(self, *args, **kwargs): super(GradeInfo, self).save(*args, **kwargs) def get_class_number(self): # 通过关联查询该年级的所有班级数 num = self.classinfo_set.count() return num get_class_number.short_description = '班级数' def get_grade_students_number(self): return self.studentinfo_set.all().count() get_grade_students_number.short_description = '年级总人数'
class ClassInfo(models.Model): """班级信息""" class_number = models.CharField(max_length=5, db_column='班级', verbose_name='班级', default='1') header = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, null=True, limit_choices_to={'is_class_leader': True}, verbose_name='班主任档案号', db_column='班主任档案号') grade = models.ForeignKey(GradeInfo, on_delete=models.SET_NULL, null=True, verbose_name='年级', db_column='年级') # 各科老师 chinese_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='chinese_teacher_class', limit_choices_to={'subject': '语文'}, blank=True, null=True, verbose_name='语文老师', db_column='语文老师') math_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='math_teacher_class', limit_choices_to={'subject': '数学'}, blank=True, null=True, verbose_name='数学老师', db_column='数学老师') english_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='english_teacher_class', limit_choices_to={'subject': '英语'}, blank=True, null=True, verbose_name='英语老师', db_column='英语老师') physical_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='physical_teacher_class', limit_choices_to={'subject': '物理'}, blank=True, null=True, verbose_name='物理老师', db_column='物理老师') chemistry_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='chemistry_teacher_class', limit_choices_to={'subject': '化学'}, blank=True, null=True, verbose_name='化学老师', db_column='化学老师') biology_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='biology_teacher_class', limit_choices_to={'subject': '生物'}, blank=True, null=True, verbose_name='生物老师', db_column='生物老师') politics_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='politics_teacher_class', limit_choices_to={'subject': '政治'}, blank=True, null=True, verbose_name='政治老师', db_column='政治老师') geography_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='geography_teacher_class', limit_choices_to={'subject': '地理'}, blank=True, null=True, verbose_name='地理老师', db_column='地理老师') history_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='history_teacher_class', limit_choices_to={'subject': '历史'}, blank=True, null=True, verbose_name='历史老师', db_column='历史老师') sport_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='sport_teacher_class', limit_choices_to={'subject': '体育'}, blank=True, null=True, verbose_name='体育老师', db_column='体育老师') music_teacher = models.ForeignKey(TeacherInfo, on_delete=models.SET_NULL, related_name='music_teacher_class', limit_choices_to={'subject': '音乐'}, blank=True, null=True, verbose_name='音乐老师', db_column='音乐老师') remark = models.TextField(max_length=100, verbose_name='备注', db_column='备注', default='', null=True, blank=True, help_text='备注不超过一百个汉字', error_messages={ 'max_length': '备注不超过一百个字' }) class Meta: verbose_name = '班级信息' verbose_name_plural = verbose_name # ordering = ['grade', 'class_number'] db_table = '班级信息表' # unique_together = ['grade', 'class_number', 'header'] def __str__(self): return '班级:{}'.format(self.class_number) def get_class_student_number(self): # 根据班主任还有入学年份筛选 num = self.studentinfo_set.all().count() return num get_class_student_number.short_description = '班级人数' def get_grade_leader(self): grade_leader = GradeInfo.objects.get(pk=self.grade.id).header return grade_leader get_grade_leader.short_description = '年级主任'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。