SQLAlchemy couldn't resolve the string 'Site' in ManagerAccount's relationship() at query time because Site wasn't guaranteed to be imported first. Adding the explicit import ensures the mapper is configured correctly regardless of import order. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
28 lines
1.1 KiB
Python
28 lines
1.1 KiB
Python
from sqlalchemy import Column, Integer, String, DateTime, Table, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
from database import Base
|
|
from models.site import Site # noqa: F401 — needed so SQLAlchemy resolves "Site" in relationship
|
|
|
|
|
|
# Many-to-many: one manager can access multiple sites, one site can have multiple managers
|
|
manager_site_access = Table(
|
|
"manager_site_access",
|
|
Base.metadata,
|
|
Column("manager_id", Integer, ForeignKey("manager_accounts.id"), primary_key=True),
|
|
Column("site_id", Integer, ForeignKey("sites.id"), primary_key=True),
|
|
)
|
|
|
|
|
|
class ManagerAccount(Base):
|
|
__tablename__ = "manager_accounts"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
email = Column(String, unique=True, nullable=False, index=True)
|
|
password_hash = Column(String, nullable=False)
|
|
full_name = Column(String, nullable=True)
|
|
is_active = Column(Integer, default=1, nullable=False)
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
sites = relationship("Site", secondary=manager_site_access, backref="manager_accounts")
|