models.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334
  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)
  19. original_name: str = Field(max_length=255)
  20. upload_time: datetime = Field(default_factory=datetime.now)
  21. subject: Subject = Relationship(back_populates="error_images")
  22. class Evaluation(SQLModel, table=True):
  23. __tablename__ = "evaluation"
  24. id: Optional[int] = Field(default=None, primary_key=True)
  25. subject_id: int = Field(foreign_key="subject.id")
  26. date: str = Field(max_length=20)
  27. title: str = Field(max_length=200)
  28. content: str = Field(default="")
  29. filename: Optional[str] = Field(default=None, max_length=255)
  30. upload_time: datetime = Field(default_factory=datetime.now)
  31. subject: Subject = Relationship(back_populates="evaluations")