29 lines
728 B
Python
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,
|
|
)
|