Files
012-kaopeilian/backend/app/models/exam_mistake.py
111 442ac78b56
Some checks failed
continuous-integration/drone/push Build is failing
sync: 同步服务器最新代码 (2026-01-27)
更新内容:
- 后端 AI 服务优化(能力分析、知识点解析等)
- 前端考试和陪练界面更新
- 修复多个 prompt 和 JSON 解析问题
- 更新 Coze 语音客户端
2026-01-27 10:03:28 +08:00

45 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")
round = Column(Integer, nullable=True, default=1, comment="考试轮次(1/2/3)")
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})>"