[FIX] HORILLA VIEWS: Updated ordered id logic to prevent URI too long issue
This commit is contained in:
@@ -324,13 +324,12 @@ class HorillaListView(ListView):
|
|||||||
query_dict, queryset, self.sortby_key, is_first_sort=is_first_sort
|
query_dict, queryset, self.sortby_key, is_first_sort=is_first_sort
|
||||||
)
|
)
|
||||||
|
|
||||||
ordered_ids = [instance.id for instance in queryset]
|
|
||||||
ordered_ids = []
|
ordered_ids = []
|
||||||
if not self._saved_filters.get("field"):
|
if not self._saved_filters.get("field"):
|
||||||
for instance in queryset:
|
for instance in queryset:
|
||||||
instance.ordered_ids = ordered_ids
|
|
||||||
ordered_ids.append(instance.pk)
|
ordered_ids.append(instance.pk)
|
||||||
|
|
||||||
|
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
|
||||||
)
|
)
|
||||||
@@ -349,10 +348,11 @@ class HorillaListView(ListView):
|
|||||||
groups, self._saved_filters.get("page"), 10
|
groups, self._saved_filters.get("page"), 10
|
||||||
)
|
)
|
||||||
|
|
||||||
for group in context["groups"]:
|
# for group in context["groups"]:
|
||||||
for instance in group["list"]:
|
# for instance in group["list"]:
|
||||||
instance.ordered_ids = ordered_ids
|
# instance.ordered_ids = ordered_ids
|
||||||
ordered_ids.append(instance.pk)
|
# ordered_ids.append(instance.pk)
|
||||||
|
|
||||||
CACHE.get(self.request.session.session_key + "cbv")[HorillaListView] = context
|
CACHE.get(self.request.session.session_key + "cbv")[HorillaListView] = context
|
||||||
from horilla.urls import path, urlpatterns
|
from horilla.urls import path, urlpatterns
|
||||||
|
|
||||||
@@ -523,11 +523,13 @@ class HorillaDetailedView(DetailView):
|
|||||||
|
|
||||||
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 = eval_validate(str(self.request.GET.get(self.ids_key)))
|
instance_ids = self.request.session.get(
|
||||||
|
f"ordered_ids_{self.model.__name__.lower()}", []
|
||||||
|
)
|
||||||
|
|
||||||
pk = context["object"].pk
|
pk = context["object"].pk
|
||||||
if instance_ids:
|
# if instance_ids:
|
||||||
context["object"].ordered_ids = instance_ids
|
# context["object"].ordered_ids = instance_ids
|
||||||
context["instance"] = context["object"]
|
context["instance"] = context["object"]
|
||||||
|
|
||||||
url = resolve(self.request.path)
|
url = resolve(self.request.path)
|
||||||
@@ -712,10 +714,11 @@ class HorillaCardView(ListView):
|
|||||||
context["filter_dict"] = data_dict
|
context["filter_dict"] = data_dict
|
||||||
|
|
||||||
ordered_ids = list(queryset.values_list("id", flat=True))
|
ordered_ids = list(queryset.values_list("id", flat=True))
|
||||||
|
ordered_ids = []
|
||||||
if not self._saved_filters.get("field"):
|
if not self._saved_filters.get("field"):
|
||||||
for instance in queryset:
|
for instance in queryset:
|
||||||
instance.ordered_ids = ordered_ids
|
|
||||||
ordered_ids.append(instance.pk)
|
ordered_ids.append(instance.pk)
|
||||||
|
self.request.session[f"ordered_ids_{self.model.__name__.lower()}"] = 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", "")
|
||||||
@@ -879,7 +882,9 @@ 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 = eval_validate(str(self.request.GET.get(self.ids_key)))
|
instance_ids = self.request.session.get(
|
||||||
|
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
|
||||||
@@ -1190,10 +1195,11 @@ class HorillaProfileView(DetailView):
|
|||||||
).first()
|
).first()
|
||||||
if active_tab:
|
if active_tab:
|
||||||
context["active_target"] = active_tab.tab_target
|
context["active_target"] = active_tab.tab_target
|
||||||
instance_ids_str = self.request.GET.get("instance_ids")
|
|
||||||
if not instance_ids_str:
|
instance_ids = self.request.session.get(
|
||||||
instance_ids_str = "[]"
|
f"ordered_ids_{self.model.__name__.lower()}", []
|
||||||
instance_ids = eval_validate(instance_ids_str)
|
)
|
||||||
|
|
||||||
if instance_ids:
|
if instance_ids:
|
||||||
CACHE.set(
|
CACHE.set(
|
||||||
f"{self.request.session.session_key}hpv-instance-ids", instance_ids
|
f"{self.request.session.session_key}hpv-instance-ids", instance_ids
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from django.views import View
|
|||||||
from django.views.decorators.csrf import csrf_protect
|
from django.views.decorators.csrf import csrf_protect
|
||||||
|
|
||||||
from base.methods import eval_validate
|
from base.methods import eval_validate
|
||||||
|
from horilla.signals import post_generic_delete, pre_generic_delete
|
||||||
from horilla_views import models
|
from horilla_views import models
|
||||||
from horilla_views.cbv_methods import get_short_uuid, login_required, merge_dicts
|
from horilla_views.cbv_methods import get_short_uuid, login_required, merge_dicts
|
||||||
from horilla_views.forms import SavedFilterForm
|
from horilla_views.forms import SavedFilterForm
|
||||||
@@ -554,7 +555,21 @@ class HorillaDeleteConfirmationView(View):
|
|||||||
if self.request.user.has_perm(
|
if self.request.user.has_perm(
|
||||||
f"{instance._meta.app_label}.delete_{instance._meta.model.__name__.lower()}"
|
f"{instance._meta.app_label}.delete_{instance._meta.model.__name__.lower()}"
|
||||||
):
|
):
|
||||||
|
pre_generic_delete.send(
|
||||||
|
sender=instance._meta.model,
|
||||||
|
instance=instance,
|
||||||
|
args=args,
|
||||||
|
view_instance=self,
|
||||||
|
kwargs=kwargs,
|
||||||
|
)
|
||||||
instance.delete()
|
instance.delete()
|
||||||
|
post_generic_delete.send(
|
||||||
|
sender=instance._meta.model,
|
||||||
|
instance=instance,
|
||||||
|
args=args,
|
||||||
|
view_instance=self,
|
||||||
|
kwargs=kwargs,
|
||||||
|
)
|
||||||
messages.success(self.request, f"Deleted {instance}")
|
messages.success(self.request, f"Deleted {instance}")
|
||||||
else:
|
else:
|
||||||
messages.info(
|
messages.info(
|
||||||
|
|||||||
Reference in New Issue
Block a user