TestFastApi/core/models/mixins.py

29 lines
728 B
Python

from sqlalchemy.orm import declared_attr, Mapped, mapped_column, relationship
from sqlalchemy import ForeignKey
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from core.models.user import User
class UserRelationMixin:
_user_id_nullable: bool = False
_user_id_unique: bool = False
_user_back_populate: str | None = None
@declared_attr
def user_id(cls) -> Mapped[int]:
return mapped_column(
ForeignKey("users.id"),
unique=cls._user_id_unique,
nullable=cls._user_id_nullable,
)
@declared_attr
def user(cls) -> Mapped["User"]:
return relationship(
"User",
back_populates=cls._user_back_populate,
)