[UPDT] HORILLA VIEWS: Dynamic detailed view key configure option

This commit is contained in:
Horilla
2025-04-17 16:21:37 +05:30
parent 8007d10b35
commit 90ec943707

View File

@@ -118,6 +118,7 @@ class HorillaListView(ListView):
if not self.view_id: if not self.view_id:
self.view_id = get_short_uuid(4) self.view_id = get_short_uuid(4)
super().__init__(**kwargs) super().__init__(**kwargs)
self.ordered_ids_key = f"ordered_ids_{self.model.__name__.lower()}"
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
@@ -390,8 +391,7 @@ class HorillaListView(ListView):
if not self._saved_filters.get("field"): if not self._saved_filters.get("field"):
for instance in queryset: for instance in queryset:
ordered_ids.append(instance.pk) ordered_ids.append(instance.pk)
self.request.session[self.ordered_ids_key] = ordered_ids
self.request.session[f"ordered_ids_{self.model.__name__.lower()}"] = ordered_ids
context["queryset"] = paginator_qry( context["queryset"] = paginator_qry(
queryset, self._saved_filters.get("page"), self.records_per_page queryset, self._saved_filters.get("page"), self.records_per_page
) )
@@ -523,27 +523,38 @@ class HorillaListView(ListView):
# response["Content-Disposition"] = f'attachment; filename="{file_name}.xls"' # response["Content-Disposition"] = f'attachment; filename="{file_name}.xls"'
# return response # return response
json_data = json.loads(dataset.export("json")) json_data = json.loads(dataset.export("json"))
merged = [ merged = []
(
[ for item in _columns:
*item, # Check if item has exactly 2 elements
next( if len(item) == 2:
( # Check if there's a matching (type, key) in export_fields (t, k, _)
m match_found = any(
for (t, k, m) in self.export_fields export_item[0] == item[0] and export_item[1] == item[1]
if t == item[0] and k == item[1] for export_item in self.export_fields
),
{},
),
]
if len(item) == 2
and any(
t == item[0] and k == item[1] for (t, k, _) in self.export_fields
) )
else item
) if match_found:
for item in _columns # Find the first matching metadata or use {} as fallback
] try:
metadata = next(
(
export_item[2]
for export_item in self.export_fields
if export_item[0] == item[0]
and export_item[1] == item[1]
),
{},
)
except Exception as e:
merged.append(item)
continue
merged.append([*item, metadata])
else:
merged.append(item)
else:
merged.append(item)
columns = [] columns = []
for column in merged: for column in merged:
if len(column) >= 3 and isinstance(column[2], dict): if len(column) >= 3 and isinstance(column[2], dict):
@@ -628,15 +639,14 @@ class HorillaDetailedView(DetailView):
def __init__(self, **kwargs: Any) -> None: def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs) super().__init__(**kwargs)
self.ordered_ids_key = f"ordered_ids_{self.model.__name__.lower()}"
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
# update_initial_cache(request, CACHE, HorillaDetailedView) # update_initial_cache(request, CACHE, HorillaDetailedView)
def get_context_data(self, **kwargs: Any): def get_context_data(self, **kwargs: Any):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
instance_ids = self.request.session.get( instance_ids = self.request.session.get(self.ordered_ids_key, [])
f"ordered_ids_{self.model.__name__.lower()}", []
)
if not context.get("object", False): if not context.get("object", False):
return context return context
@@ -758,6 +768,7 @@ class HorillaCardView(ListView):
self.request = request self.request = request
# update_initial_cache(request, CACHE, HorillaCardView) # update_initial_cache(request, CACHE, HorillaCardView)
self._saved_filters = QueryDict() self._saved_filters = QueryDict()
self.ordered_ids_key = f"ordered_ids_{self.model.__name__.lower()}"
def get_queryset(self): def get_queryset(self):
if not self.queryset: if not self.queryset:
@@ -831,7 +842,7 @@ class HorillaCardView(ListView):
if not self._saved_filters.get("field"): if not self._saved_filters.get("field"):
for instance in queryset: for instance in queryset:
ordered_ids.append(instance.pk) ordered_ids.append(instance.pk)
self.request.session[f"ordered_ids_{self.model.__name__.lower()}"] = ordered_ids self.request.session[self.ordered_ids_key] = ordered_ids
# CACHE.get(self.request.session.session_key + "cbv")[HorillaCardView] = context # CACHE.get(self.request.session.session_key + "cbv")[HorillaCardView] = context
referrer = self.request.GET.get("referrer", "") referrer = self.request.GET.get("referrer", "")
@@ -946,6 +957,7 @@ class HorillaFormView(FormView):
def __init__(self, **kwargs: Any) -> None: def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs) super().__init__(**kwargs)
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.ordered_ids_key = f"ordered_ids_{self.model.__name__.lower()}"
self.request = request self.request = request
if not self.success_url: if not self.success_url:
self.success_url = self.request.path self.success_url = self.request.path
@@ -995,9 +1007,7 @@ class HorillaFormView(FormView):
pk = self.form.instance.pk pk = self.form.instance.pk
# next/previous option in the forms # next/previous option in the forms
if pk and self.request.GET.get(self.ids_key): if pk and self.request.GET.get(self.ids_key):
instance_ids = self.request.session.get( instance_ids = self.request.session.get(self.ordered_ids_key, [])
f"ordered_ids_{self.model.__name__.lower()}", []
)
url = resolve(self.request.path) url = resolve(self.request.path)
key = list(url.kwargs.keys())[0] key = list(url.kwargs.keys())[0]
url_name = url.url_name url_name = url.url_name
@@ -1237,6 +1247,7 @@ class HorillaProfileView(DetailView):
request = getattr(_thread_locals, "request", None) request = getattr(_thread_locals, "request", None)
self.request = request self.request = request
self.ordered_ids_key = f"ordered_ids_{self.model.__name__.lower()}"
# update_initial_cache(request, CACHE, HorillaProfileView) # update_initial_cache(request, CACHE, HorillaProfileView)
from horilla.urls import path, urlpatterns from horilla.urls import path, urlpatterns
@@ -1312,9 +1323,7 @@ class HorillaProfileView(DetailView):
if active_tab: if active_tab:
context["active_target"] = active_tab.tab_target context["active_target"] = active_tab.tab_target
instance_ids = self.request.session.get( instance_ids = self.request.session.get(self.ordered_ids_key, [])
f"ordered_ids_{self.model.__name__.lower()}", []
)
if instance_ids: if instance_ids:
CACHE.set( CACHE.set(