Allow view overrides for registering models with admin (#1249)

This commit is contained in:
Siddhant Goel 2023-06-27 23:08:09 +02:00 committed by GitHub
parent 1d4fda273b
commit c6c4410db5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 1 deletions

View File

@ -10,4 +10,5 @@ class AdminDash:
"""Data used to build the admin dashboard."""
models: list = field(default_factory=list)
view_overrides: dict = field(default_factory=dict)
admin: Optional[Admin] = None

View File

@ -428,8 +428,11 @@ class App(Base):
logo_url="https://pynecone.io/logo.png",
)
)
for model in config.admin_dash.models:
admin.add_view(ModelView(model))
view = config.admin_dash.view_overrides.get(model, ModelView)
admin.add_view(view(model))
admin.mount_to(self.api)
def compile(self):

View File

@ -13,6 +13,7 @@ import sqlmodel
from fastapi import UploadFile
from starlette_admin.auth import AuthProvider
from starlette_admin.contrib.sqla.admin import Admin
from starlette_admin.contrib.sqla.view import ModelView
from reflex import AdminDash, constants
from reflex.app import App, DefaultState, process, upload
@ -266,6 +267,26 @@ def test_initialize_with_custom_admin_dashboard(
assert app.admin_dash.admin.auth_provider == test_custom_auth_admin
def test_initialize_admin_dashboard_with_view_overrides(test_model):
"""Test setting the admin dashboard of an app with view class overriden.
Args:
test_model: The default model.
"""
class TestModelView(ModelView):
pass
app = App(
admin_dash=AdminDash(
models=[test_model], view_overrides={test_model: TestModelView}
)
)
assert app.admin_dash is not None
assert app.admin_dash.models == [test_model]
assert app.admin_dash.view_overrides[test_model] == TestModelView
def test_initialize_with_state(test_state):
"""Test setting the state of an app.