diff options
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 |
commit | f8eca001008f0e07c6a2a38e78c1af5db415940a (patch) | |
tree | de407b7ee99b00f572585e054719d9920a718420 | |
parent | 3e08770a223f80409e278b9b9fcf9ec4cbe98966 (diff) | |
download | Ishtar-f8eca001008f0e07c6a2a38e78c1af5db415940a.tar.bz2 Ishtar-f8eca001008f0e07c6a2a38e78c1af5db415940a.zip |
get_item: do not deduplicate when using database views (refs #4079)
-rw-r--r-- | archaeological_context_records/views.py | 4 | ||||
-rw-r--r-- | ishtar_common/views.py | 23 |
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] |