# -*- coding: utf-8 -*- # @Time : 2024/11/19 下午6:09 # @Author : 河瞬 # @FileName: new_models.py # @Software: PyCharm from datetime import datetime from typing import List, Optional from sqlmodel import Field, Relationship, SQLModel class Tenant(SQLModel, table=True): __tablename__ = 'Tenant' id: Optional[int] = Field(default=None, primary_key=True) name: str = Field(index=True) users: List["User"] = Relationship(back_populates="tenant") projects: List["Project"] = Relationship(back_populates="owner") class ProjectUserLink(SQLModel, table=True): __tablename__ = 'ProjectUserLink' project_id: int | None = Field(default=None, foreign_key="Project.id", primary_key=True) user_id: int | None = Field(default=None, foreign_key="User.id", primary_key=True) class User(SQLModel, table=True): __tablename__ = 'User' id: Optional[int] = Field(default=None, primary_key=True) username: str = Field(index=True) password: str role: int tenant_id: int = Field(default=None, foreign_key="Tenant.id") tenant: Tenant = Relationship(back_populates="users") projects: List["Project"] = Relationship(back_populates="users", link_model=ProjectUserLink) class Project(SQLModel, table=True): __tablename__ = 'Project' id: Optional[int] = Field(default=None, primary_key=True) name: str = Field(index=True) requirement: str owner_id: int = Field(default=None, foreign_key="Tenant.id") owner: Tenant = Relationship(back_populates="projects") start_time: datetime = Field(default=datetime.utcnow) deadline: datetime users: List["User"] = Relationship(back_populates="projects", link_model=ProjectUserLink)