summaryrefslogtreecommitdiff
path: root/ishtar_common/utils.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2025-03-19 11:54:38 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-03-19 12:39:22 +0100
commit3adbd561ced57cb9c950af2d6d7d25f57f8799e0 (patch)
treee2301ff31a54062c731a60774e088f073d6a89cf /ishtar_common/utils.py
parent6468fa4c22b5ec2c30b450a5d0f8cc005d01f4be (diff)
downloadIshtar-3adbd561ced57cb9c950af2d6d7d25f57f8799e0.tar.bz2
Ishtar-3adbd561ced57cb9c950af2d6d7d25f57f8799e0.zip
🚑️ fix huge performance problems on permissions when too many items are attached
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r--ishtar_common/utils.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py
index e69ef0290..666e05bd9 100644
--- a/ishtar_common/utils.py
+++ b/ishtar_common/utils.py
@@ -530,12 +530,17 @@ class OwnPerms:
return []
@classmethod
- def _construct_query_own(cls, prefix, dct_list):
+ def _construct_query_own(cls, model, prefix, dct_list):
q = None
for subquery_dict in dct_list:
subquery = None
for k in subquery_dict:
subsubquery = Q(**{prefix + k: subquery_dict[k]})
+ # slice in multiple queries in order to prevent too complicated queries
+ subsubquery = Q(id__in=(
+ model.objects.filter(subsubquery).values_list("id", flat=True)
+ )
+ )
if subquery:
subquery |= subsubquery
else: