diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-02-13 13:23:29 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-02-13 13:23:29 +0100 |
commit | 29d066ec320727a28d887f32588fa1f2dcf36e08 (patch) | |
tree | aead69cdc27743add5535450c812c8ce9d440584 /ishtar_common | |
parent | a6d77a3a3358463c591900872a8ae62286f9509d (diff) | |
download | Ishtar-29d066ec320727a28d887f32588fa1f2dcf36e08.tar.bz2 Ishtar-29d066ec320727a28d887f32588fa1f2dcf36e08.zip |
Manage search on json fields - HistorySelect for all concerned forms
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/forms.py | 10 | ||||
-rw-r--r-- | ishtar_common/forms_common.py | 6 | ||||
-rw-r--r-- | ishtar_common/views.py | 3 | ||||
-rw-r--r-- | ishtar_common/views_item.py | 15 |
4 files changed, 30 insertions, 4 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 754f63f74..d697ee89b 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -273,6 +273,11 @@ class CustomForm(BSForm): @classmethod def _get_json_fields(cls, custom_form): + """ + Return json field list from database configuration + :param custom_form: form concerned + :return: ((order1, key1, field1), ...) + """ fields = [] for field in custom_form.json_fields.order_by('order').all(): key = "data__" + field.json_field.key @@ -299,6 +304,11 @@ class CustomForm(BSForm): @classmethod def check_custom_form(cls, current_user): + """ + Check form customization + :param current_user: + :return: available, excluded_fields, json_fields + """ if not current_user: return True, [], [] base_q = {"form": cls.form_slug, 'available': True} diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index fadda7593..eb15445a4 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -44,7 +44,7 @@ from ishtar_common.templatetags.link_to_window import simple_link_to_window from forms import FinalForm, FormSet, reverse_lazy, name_validator, \ TableSelect, ManageOldType, CustomForm, FieldType, FormHeader, \ FormSetWithDeleteSwitches, IshtarForm, get_data_from_formset, \ - file_size_validator + file_size_validator, HistorySelect from ishtar_common.utils import is_downloadable, clean_session_cache, \ max_size_help @@ -1228,8 +1228,10 @@ class DocumentForm(forms.ModelForm, CustomForm, ManageOldType): return item -class DocumentSelect(TableSelect): +class DocumentSelect(HistorySelect): _model = models.Document + form_admin_name = _(u"Document - 001 - Search") + form_slug = "document-001-search" search_vector = forms.CharField( label=_(u"Full text search"), widget=widgets.SearchWidget( diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 5050f2d0d..61bae69e2 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1679,7 +1679,8 @@ class OrganizationPersonEdit(LoginRequiredMixin, UpdateView): # documents show_document = show_item(models.Document, 'document') -get_document = get_item(models.Document, 'get_document', 'document') +get_document = get_item(models.Document, 'get_document', 'document', + search_form=forms.DocumentSelect) display_document = display_item(models.Document) diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 1a0824c3b..65f06d2f1 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -1000,7 +1000,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None, relative_session_names=None, specific_perms=None, own_table_cols=None, relation_types_prefix=None, do_not_deduplicate=False, model_for_perms=None, - alt_query_own=None): + alt_query_own=None, search_form=None): """ Generic treatment of tables @@ -1022,6 +1022,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None, instance for record_relations view). :param model_for_perms: use another model to check permission :param alt_query_own: name of alternate method to get query_own + :param search_form: associated search form to manage JSON query keys :return: """ def func(request, data_type='json', full=False, force_own=False, @@ -1140,6 +1141,18 @@ def get_item(model, func_name, default_name, extra_request_keys=None, for field in associated_fields])) request_keys.update(my_extra_request_keys) + # manage search on json fields and excluded fields + if search_form and request.user and getattr( + request.user, 'ishtaruser', None): + available, excluded_fields, json_fields = \ + search_form.check_custom_form(request.user.ishtaruser) + # for now no manage on excluded_fields: should we prevent search on + # some fields regarding the user concerned? + if available: + for __, jkey, jfield in json_fields: + if jfield.alt_name not in request_keys: + request_keys[jfield.alt_name] = jkey + "__iexact" + if "query" in dct: request_items = dct["query"] request_items["submited"] = True |