Skip to content

Commit 28b70f1

Browse files
committed
feat: implement request-based field caching in SBAdminBaseView
1 parent 682ea08 commit 28b70f1

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

src/django_smartbase_admin/engine/admin_base_view.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,18 @@ def get_field_map(self, request) -> dict[str, "SBAdminField"]:
152152

153153
def init_fields_cache(self, fields_source, configuration, force=False):
154154
from django_smartbase_admin.engine.field import SBAdminField
155+
from django_smartbase_admin.services.thread_local import SBAdminThreadLocalService
156+
157+
try:
158+
request = SBAdminThreadLocalService.get_request()
159+
except LookupError:
160+
request = None
161+
cache_key = self.get_id()
162+
if request is not None:
163+
request_field_cache = getattr(request, "_sbadmin_field_cache", {})
164+
if not force and cache_key in request_field_cache:
165+
self.field_cache = request_field_cache[cache_key]
166+
return self.field_cache.values()
155167

156168
fields = []
157169
self.field_cache = {}
@@ -161,6 +173,10 @@ def init_fields_cache(self, fields_source, configuration, force=False):
161173
field.init_field_static(self, configuration)
162174
fields.append(field)
163175
self.field_cache[field.name] = field
176+
if request is not None:
177+
request_field_cache = getattr(request, "_sbadmin_field_cache", {})
178+
request_field_cache[cache_key] = self.field_cache
179+
request._sbadmin_field_cache = request_field_cache
164180
return fields
165181

166182
def get_action_url(self, action, modifier="template"):

0 commit comments

Comments
 (0)