models.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from sqlmodel import SQLModel, Field, Relationship, text
  2. from datetime import datetime
  3. from typing import Optional, List
  4. from sqlalchemy import Column, String, Text
  5. class Subject(SQLModel, table=True):
  6. __tablename__ = "subject"
  7. id: Optional[int] = Field(default=None, primary_key=True)
  8. name: str = Field(max_length=100)
  9. color: str = Field(default="#6366f1")
  10. created_at: datetime = Field(default_factory=datetime.now)
  11. error_images: List["ErrorImage"] = Relationship(back_populates="subject")
  12. evaluations: List["Evaluation"] = Relationship(back_populates="subject")
  13. class ErrorImage(SQLModel, table=True):
  14. __tablename__ = "error_image"
  15. id: Optional[int] = Field(default=None, primary_key=True)
  16. subject_id: int = Field(foreign_key="subject.id")
  17. date: str = Field(max_length=20, index=True)
  18. filename: str = Field(max_length=255, default="")
  19. original_name: str = Field(max_length=255, default="")
  20. question: str = Field(max_length=500, default="")
  21. answer: str = Field(max_length=1000, default="")
  22. upload_time: datetime = Field(default_factory=datetime.now)
  23. subject: Subject = Relationship(back_populates="error_images")
  24. class Evaluation(SQLModel, table=True):
  25. __tablename__ = "evaluation"
  26. id: Optional[int] = Field(default=None, primary_key=True)
  27. subject_id: int = Field(foreign_key="subject.id")
  28. date: str = Field(max_length=20)
  29. title: str = Field(max_length=200)
  30. content: str = Field(default="")
  31. filename: Optional[str] = Field(default=None, max_length=255)
  32. upload_time: datetime = Field(default_factory=datetime.now)
  33. subject: Subject = Relationship(back_populates="evaluations")