superlishunqin e7fa4bc030 first commit
2025-06-11 19:56:34 +08:00

43 lines
1.9 KiB
Python

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'<Student {self.name}({self.student_number})>'