Files
012-kaopeilian/backend/app/models/exam_mistake.py
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

44 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
错题记录模型
"""
from sqlalchemy import Column, Integer, ForeignKey, Text, DateTime, func
from sqlalchemy.orm import relationship
from datetime import datetime
from app.models.base import BaseModel
class ExamMistake(BaseModel):
"""错题记录表"""
__tablename__ = "exam_mistakes"
# 核心关联字段
user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True, comment="用户ID")
exam_id = Column(Integer, ForeignKey("exams.id", ondelete="CASCADE"), nullable=False, index=True, comment="考试ID")
question_id = Column(Integer, ForeignKey("questions.id", ondelete="SET NULL"), nullable=True, index=True, comment="题目IDAI生成的题目可能为空")
knowledge_point_id = Column(Integer, ForeignKey("knowledge_points.id", ondelete="SET NULL"), nullable=True, index=True, comment="关联的知识点ID")
# 题目核心信息
question_content = Column(Text, nullable=False, comment="题目内容")
correct_answer = Column(Text, nullable=False, comment="正确答案")
user_answer = Column(Text, nullable=True, comment="用户答案")
question_type = Column(Text, nullable=True, index=True, comment="题型(single/multiple/judge/blank/essay)")
# 掌握状态和统计字段
mastery_status = Column(Text, nullable=False, default='unmastered', index=True, comment="掌握状态: unmastered-未掌握, mastered-已掌握")
difficulty = Column(Text, nullable=False, default='medium', index=True, comment="题目难度: easy-简单, medium-中等, hard-困难")
wrong_count = Column(Integer, nullable=False, default=1, comment="错误次数统计")
mastered_at = Column(DateTime, nullable=True, comment="标记掌握时间")
# 审计字段继承自BaseModel但这里重写以匹配数据库实际结构
created_at = Column(DateTime, nullable=False, server_default=func.now(), comment="创建时间(北京时间)")
updated_at = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now(), comment="更新时间(北京时间)")
# 关系
user = relationship("User", backref="exam_mistakes")
exam = relationship("Exam", backref="mistakes")
question = relationship("Question", backref="mistake_records")
knowledge_point = relationship("KnowledgePoint", backref="mistake_records")
def __repr__(self):
return f"<ExamMistake(id={self.id}, user_id={self.user_id}, exam_id={self.exam_id})>"