From 18e0f7498c144c337ab93d71f679fb10a92a5a5b Mon Sep 17 00:00:00 2001 From: long2ice Date: Mon, 24 May 2021 20:03:48 +0800 Subject: [PATCH] Add `resource.get_compute_fields`. --- CHANGELOG.md | 1 + examples/resources.py | 1 + fastapi_admin/depends.py | 2 ++ fastapi_admin/resources.py | 11 +++++++++++ fastapi_admin/template.py | 3 +++ fastapi_admin/templates/list.html | 3 +++ 6 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0342861..a779555 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Add `column_attributes`. - Remove `can_create` and add `get_toolbar_actions`. +- Add `resource.get_compute_fields`. ### 1.0.0 diff --git a/examples/resources.py b/examples/resources.py index 8a213b3..ff71a59 100644 --- a/examples/resources.py +++ b/examples/resources.py @@ -56,6 +56,7 @@ class AdminResource(Model): ), "created_at", ] + async def get_toolbar_actions(self, request: Request) -> List[ToolbarAction]: return [] diff --git a/fastapi_admin/depends.py b/fastapi_admin/depends.py index f6caa3f..a25b078 100644 --- a/fastapi_admin/depends.py +++ b/fastapi_admin/depends.py @@ -26,9 +26,11 @@ async def get_model_resource(request: Request, model=Depends(get_model)): actions = await model_resource.get_actions(request) bulk_actions = await model_resource.get_bulk_actions(request) toolbar_actions = await model_resource.get_toolbar_actions(request) + compute_fields = await model_resource.get_compute_fields(request) setattr(model_resource, "toolbar_actions", toolbar_actions) setattr(model_resource, "actions", actions) setattr(model_resource, "bulk_actions", bulk_actions) + setattr(model_resource, "compute_fields", compute_fields) return model_resource diff --git a/fastapi_admin/resources.py b/fastapi_admin/resources.py index e4ad0b8..495604d 100644 --- a/fastapi_admin/resources.py +++ b/fastapi_admin/resources.py @@ -72,6 +72,14 @@ class ToolbarAction(Action): class_: Optional[str] +class ComputeField(BaseModel): + label: str + name: str + + async def get_value(self, request: Request, obj: dict): + return obj.get(self.name) + + class Model(Resource): model: Type[TortoiseModel] fields: List[Union[str, Field]] = [] @@ -82,6 +90,9 @@ class Model(Resource): can_create: bool = True enctype = "application/x-www-form-urlencoded" + async def get_compute_fields(self, request: Request) -> List[ComputeField]: + return [] + async def get_toolbar_actions(self, request: Request) -> List[ToolbarAction]: return [ ToolbarAction( diff --git a/fastapi_admin/template.py b/fastapi_admin/template.py index c0eb07b..beb77d1 100644 --- a/fastapi_admin/template.py +++ b/fastapi_admin/template.py @@ -75,6 +75,9 @@ async def render_values( item.append(await fields[i].display.render(request, value[k])) else: item.append(await fields[i].input.render(request, value[k])) + for compute_field in await model.get_compute_fields(request): + item.append(await compute_field.get_value(request, value)) + cell_item.append({}) ret.append(item) cell_attributes.append(cell_item) return ret, row_attributes, column_attributes, cell_attributes diff --git a/fastapi_admin/templates/list.html b/fastapi_admin/templates/list.html index 485ebc2..0e51330 100644 --- a/fastapi_admin/templates/list.html +++ b/fastapi_admin/templates/list.html @@ -91,6 +91,9 @@ {% for label in fields_label %} {{ label }} {% endfor %} + {% for compute_field in model_resource.compute_fields %} + {{ compute_field.label }} + {% endfor %} {% if model_resource.actions %} {% endif %}