from app.models import db from datetime import datetime class Student(db.Model): __tablename__ = 'students' student_id = db.Column(db.Integer, primary_key=True) student_number = db.Column(db.String(20), db.ForeignKey('users.student_number'), unique=True, nullable=False) name = db.Column(db.String(50), nullable=False, index=True) gender = db.Column(db.Enum('男', '女'), nullable=False) grade = db.Column(db.Integer, nullable=False, index=True) phone = db.Column(db.String(11)) supervisor = db.Column(db.String(50), index=True) college = db.Column(db.String(100)) major = db.Column(db.String(100)) degree_type = db.Column(db.Enum('专硕', '学博', '学硕', '专博')) status = db.Column(db.Enum('在读', '毕业'), default='在读') enrollment_date = db.Column(db.Date) created_at = db.Column(db.DateTime, default=datetime.utcnow) # 用户关系 user = db.relationship('User', backref='student', foreign_keys=[student_number], primaryjoin="Student.student_number==User.student_number") def get_latest_attendance(self, limit=10): """获取最近的考勤记录""" from app.models.attendance import WeeklyAttendance return WeeklyAttendance.query.filter_by(student_number=self.student_number) \ .order_by(WeeklyAttendance.week_start_date.desc()) \ .limit(limit) def get_attendance_by_date_range(self, start_date, end_date): """获取指定日期范围的考勤记录""" from app.models.attendance import WeeklyAttendance return WeeklyAttendance.query.filter_by(student_number=self.student_number) \ .filter(WeeklyAttendance.week_start_date >= start_date, WeeklyAttendance.week_end_date <= end_date) \ .all() def __repr__(self): return f''