diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-11-13 12:40:56 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-02-28 12:15:21 +0100 |
commit | 448a95ee01f208122a3cddb18a0eb137f660d5d6 (patch) | |
tree | d3468cb46fefa64abf0f5c50d687ec29d64168aa /ishtar_common/models.py | |
parent | b14b2251e02e0bcf0233e670a7cd1ca93cfdf3cc (diff) | |
download | Ishtar-448a95ee01f208122a3cddb18a0eb137f660d5d6.tar.bz2 Ishtar-448a95ee01f208122a3cddb18a0eb137f660d5d6.zip |
Labels: fix filtering
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 55 |
1 files changed, 32 insertions, 23 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 1febb4664..89bee27cd 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -176,26 +176,17 @@ class ValueGetter(object): continue if field_name in self.GET_VALUES_EXCLUDE_FIELDS: continue + if hasattr(value, 'get_values'): + new_prefix = prefix + field_name + '_' + values.update( + value.get_values(new_prefix, filtr=filtr, **kwargs)) if filtr and prefix + field_name not in filtr: - if hasattr(value, 'get_values'): - new_prefix = prefix + field_name + '_' - new_filtr = self._get_values_update_sub_filter(filtr, - new_prefix) - values.update( - value.get_values(new_prefix, filtr=new_filtr, **kwargs)) continue if hasattr(self, "get_values_for_" + field_name): values[prefix + field_name] = getattr( self, "get_values_for_" + field_name)() else: - if hasattr(value, 'get_values'): - new_prefix = prefix + field_name + '_' - new_filtr = self._get_values_update_sub_filter(filtr, - new_prefix) - values.update( - value.get_values(new_prefix, filtr=new_filtr, **kwargs)) - else: - values[prefix + field_name] = value + values[prefix + field_name] = value values.update(self._get_values_documents(prefix=prefix, filtr=filtr)) for extra_field in self.GET_VALUES_EXTRA: values[prefix + extra_field] = getattr(self, extra_field) or '' @@ -223,11 +214,12 @@ class ValueGetter(object): value_list.append((key, str(values[key]))) for global_var in GlobalVar.objects.all(): values[global_var.slug] = global_var.value or "" - values['VALUES'] = json.dumps( - values, indent=4, sort_keys=True, - skipkeys=True, ensure_ascii=False, - separators=("", " : "), - ).replace(" " * 4, "\t") + if not filtr or 'VALUES' in filtr: + values['VALUES'] = json.dumps( + values, indent=4, sort_keys=True, + skipkeys=True, ensure_ascii=False, + separators=("", " : "), + ).replace(" " * 4, "\t") return values @@ -1496,7 +1488,18 @@ class DocumentTemplate(models.Model): key = s.groups()[0] if key not in filtr: filtr.append(key) - return filtr + new_filter = [] + for fil in filtr: + keys = fil.split('.') + prefix = "" + for k in keys: + if prefix: + prefix += '_' + if prefix + k in new_filter: + continue + new_filter.append(prefix + k) + prefix += k + return new_filter def publish_labels(self, objects): if not objects: @@ -1509,12 +1512,18 @@ class DocumentTemplate(models.Model): len_objects = len(objects) names = [] + item_re = r"items\.\d\.([A-Za-z0-9_.]*)(?:\|[^}]+)*" filtr = self.get_filter( self.template, - # e.g.: {{items.4.key}} - [r'{{ *items\.\d\.([A-Za-z0-9_.]*)(\|[A-Za-z0-9_.-]*)* *}}'] + [ + # {{items.4.key}} + r'{{ *' + item_re + r' *}}', + # {% if items.42.other_key %} + r'{% *if ' + item_re + r' *%}', + # {% for item in items.42.another_keys %} + r'{% *for +[A-Za-z0-9_]+ +in +' + item_re + r' *%}', + ] ) - for idx in range(int(len(objects) / self.label_per_page) + 1): if idx * self.label_per_page >= len_objects: break |