Skip to content

Commit cbc9107

Browse files
committed
perf: Optimized the fields field auto-generation logic
1 parent a63c19d commit cbc9107

2 files changed

Lines changed: 9 additions & 4 deletions

File tree

fastapi_amis_admin/admin/admin.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ class PageAdmin(PageSchemaAdmin, RouterAdmin):
384384
def __init__(self, app: "AdminApp"):
385385
RouterAdmin.__init__(self, app)
386386
if self.page_path is None:
387-
self.page_path = f"/{self.__class__.__module__}/{self.__class__.__name__}"
387+
self.page_path = f"/{self.__class__.__name__}"
388388
PageSchemaAdmin.__init__(self, app)
389389

390390
async def page_permission_depend(self, request: Request) -> bool:
@@ -636,10 +636,14 @@ def __init__(self, app: "AdminApp"):
636636
self.schema_model = self.parser.get_table_model_schema(self.model)
637637
assert self.schema_model, "schema_model is None"
638638
list_display_insfield = self.parser.filter_insfield(self.list_display, save_class=(Label,))
639-
self.list_filter = self.list_filter and self.list_filter.copy() or list_display_insfield or []
639+
list_display_insfield = list_display_insfield or list(self.parser.get_table_model_insfields(self.model).values())
640+
# Initialize the filterable fields
641+
self.list_filter = self.list_filter and self.list_filter.copy() or list_display_insfield
640642
self.list_filter.extend([field for field in self.search_fields if field not in self.list_filter])
643+
# Initialize the selected fields
644+
self.fields = self.fields and self.fields.copy() or []
645+
self.fields.extend([field for field in list_display_insfield if field not in self.fields])
641646
SqlalchemyCrud.__init__(self, self.model, self.engine)
642-
self.fields.extend(list_display_insfield)
643647
BaseActionAdmin.__init__(self, app)
644648

645649
@property

fastapi_amis_admin/crud/_sqlalchemy.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,15 @@ class SqlalchemySelector(Generic[TableModelT]):
105105
`?link_model=auth_user&link_item_id={user_id}`.
106106
"""
107107
pk_name: str = "id" # Primary key name
108+
parser: TableModelParser = None # Table model parser
108109

109110
def __init__(self, model: Type[TableModelT] = None, fields: List[SqlaField] = None) -> None:
110111
self.model = model or self.model
111112
assert self.model, "model is None"
112113
assert hasattr(self.model, "__table__"), "model must be has __table__ attribute."
113114
self.pk_name: str = self.pk_name or self.model.__table__.primary_key.columns.keys()[0]
114115
self.pk: InstrumentedAttribute = self.model.__dict__[self.pk_name]
115-
self.parser = TableModelParser(self.model)
116+
self.parser = self.parser or TableModelParser(self.model)
116117
fields = fields or self.fields or self.model_insfields
117118
exclude = self.parser.filter_insfield(self.exclude)
118119
self.fields = [

0 commit comments

Comments
 (0)