summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-05-01 18:38:59 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-06-12 08:43:58 +0200
commitf8eca001008f0e07c6a2a38e78c1af5db415940a (patch)
treede407b7ee99b00f572585e054719d9920a718420
parent3e08770a223f80409e278b9b9fcf9ec4cbe98966 (diff)
downloadIshtar-f8eca001008f0e07c6a2a38e78c1af5db415940a.tar.bz2
Ishtar-f8eca001008f0e07c6a2a38e78c1af5db415940a.zip
get_item: do not deduplicate when using database views (refs #4079)
-rw-r--r--archaeological_context_records/views.py4
-rw-r--r--ishtar_common/views.py23
2 files changed, 24 insertions, 3 deletions
diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py
index 4f4b06993..53ef90a40 100644
--- a/archaeological_context_records/views.py
+++ b/archaeological_context_records/views.py
@@ -88,7 +88,9 @@ get_contextrecordsource = get_item(
get_contextrecordrelation = get_item(
models.RecordRelationView, 'get_contextrecordrelation',
- 'contextrecordrelation', specific_perms=['view_recordrelation'])
+ 'contextrecordrelation', specific_perms=['view_recordrelation'],
+ do_not_deduplicate=True
+)
get_contextrecordrelationdetail = get_item(
models.RecordRelations, 'get_contextrecordrelationdetail',
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index e5fdff2fe..945d4764c 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -654,9 +654,28 @@ EXCLUDED_FIELDS = ['length']
def get_item(model, func_name, default_name, extra_request_keys=[],
base_request=None, bool_fields=[], reversed_bool_fields=[],
dated_fields=[], associated_models=[], relative_session_names=[],
- specific_perms=[], own_table_cols=None, relation_types_prefix={}):
+ specific_perms=[], own_table_cols=None, relation_types_prefix={},
+ do_not_deduplicate=False):
"""
Generic treatment of tables
+
+ :param model: model used for query
+ :param func_name: name of the function (used for session storage)
+ :param default_name: key used for default search in session
+ :param extra_request_keys: default query limitation
+ :param base_request:
+ :param bool_fields:
+ :param reversed_bool_fields:
+ :param dated_fields:
+ :param associated_models:
+ :param relative_session_names:
+ :param specific_perms:
+ :param own_table_cols:
+ :param relation_types_prefix:
+ :param do_not_deduplicate: duplication of id can occurs on large queryset a
+ mecanism of deduplication is used. But duplicate ids can be normal (for
+ instance for record_relations view).
+ :return:
"""
def func(request, data_type='json', full=False, force_own=False,
col_names=None, **dct):
@@ -1099,7 +1118,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],
c_ids = []
for item in items:
# manual deduplicate when distinct is not enough
- if item.pk in c_ids:
+ if not do_not_deduplicate and item.pk in c_ids:
continue
c_ids.append(item.pk)
data = [item.pk]