43 lines
1.9 KiB
Python
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})>'
|