1+ from typing import List
2+
13from fastapi import FastAPI
2- from sqlalchemy import Boolean , Integer , String , select
4+ from sqlalchemy import Boolean , Integer , String , select , ForeignKey
35from sqlalchemy .ext .asyncio import async_sessionmaker , create_async_engine
4- from sqlalchemy .orm import DeclarativeBase , Mapped , mapped_column
6+ from sqlalchemy .orm import DeclarativeBase , Mapped , mapped_column , relationship
57
68from fastadmin import SqlAlchemyModelAdmin , register , fastapi_app as admin_app
79
@@ -23,10 +25,21 @@ class User(Base):
2325 is_superuser : Mapped [bool ] = mapped_column (Boolean , default = False , nullable = False )
2426 is_active : Mapped [bool ] = mapped_column (Boolean , default = False , nullable = False )
2527
28+ transactions : Mapped [List ["Transaction" ]] = relationship (back_populates = "user" )
29+
2630 def __str__ (self ):
2731 return self .username
2832
2933
34+ class Transaction (Base ):
35+ __tablename__ = "transaction"
36+
37+ id : Mapped [int ] = mapped_column (Integer , primary_key = True , nullable = False )
38+ user_id : Mapped [int ] = mapped_column (ForeignKey ("user.id" ))
39+
40+ user : Mapped ["User" ] = relationship (back_populates = "transactions" )
41+
42+
3043async def init_db ():
3144 async with sqlalchemy_engine .begin () as c :
3245 await c .run_sync (Base .metadata .drop_all )
@@ -47,7 +60,7 @@ async def create_superuser():
4760
4861@register (User , sqlalchemy_sessionmaker = sqlalchemy_sessionmaker )
4962class UserAdmin (SqlAlchemyModelAdmin ):
50- exclude = ("hash_password " ,)
63+ exclude = ("password " ,)
5164 list_display = ("id" , "username" , "is_superuser" , "is_active" )
5265 list_display_links = ("id" , "username" )
5366 list_filter = ("id" , "username" , "is_superuser" , "is_active" )
@@ -67,6 +80,11 @@ async def authenticate(self, username, password):
6780 return None
6881 return user .id
6982
83+ @register (Transaction , sqlalchemy_sessionmaker = sqlalchemy_sessionmaker )
84+ class TransactionAdmin (SqlAlchemyModelAdmin ):
85+ list_display = ("id" , "user" )
86+ raw_id_fields = ("user" ,)
87+
7088
7189app = FastAPI ()
7290
0 commit comments