diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index d4cac83df..6dc6d16c0 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -312,6 +312,8 @@ class ValueGetter: def get_values(self, prefix="", no_values=False, filtr=None, **kwargs): if not prefix: prefix = self._prefix + if not filtr: + filtr = [] extra_args = ["getvalues", str(self.pk), prefix, "1" if no_values else "0"] if filtr: extra_args += filtr @@ -333,14 +335,16 @@ class ValueGetter: and prefix + "qrcode_path" not in exclude ): values[prefix + "qrcode_path"] = self.qrcode_path - for field_name in get_all_field_names(self): + + for field_name in sorted(get_all_field_names(self) + self.GET_VALUES_EXTRA): try: value = getattr(self, field_name) except (AttributeError, MultipleObjectsReturned): continue if ( - field_name in self.GET_VALUES_EXCLUDE_FIELDS - or prefix + field_name in exclude + (field_name in self.GET_VALUES_EXCLUDE_FIELDS + or prefix + field_name in exclude) or + kwargs.get(f"no_{field_name}", False) ): continue if filtr and not any( @@ -349,6 +353,17 @@ class ValueGetter: continue if hasattr(value, "get_values"): new_prefix = prefix + field_name + "_" + new_exclude = exclude[:] + slugs = [getattr(self, "SLUG", ""), getattr(self, "ALT_SLUG", "")] + for slug in slugs: + if not slug: + continue + for s in (slug, new_prefix + slug, slug + "s", + new_prefix + slug + "s"): + if s not in new_exclude: + new_exclude.append(s) + new_kwargs = kwargs.copy() + new_kwargs["exclude"] = new_exclude values.update(value.get_values(new_prefix, filtr=filtr, **kwargs)) if hasattr(self, "get_values_for_" + field_name): values[prefix + field_name] = getattr( @@ -357,12 +372,6 @@ class ValueGetter: else: values[prefix + field_name] = value values.update(self._get_values_documents(prefix=prefix, filtr=filtr)) - for extra_field in self.GET_VALUES_EXTRA: - if filtr and not any( - extra_field for f in filtr if f.startswith(prefix + extra_field) - ): - continue - values[prefix + extra_field] = getattr(self, extra_field) or "" for key, val in values.items(): if val is None: val = "" @@ -376,7 +385,8 @@ class ValueGetter: val = "" values[key] = val values.update( - self.get_extra_values(prefix=prefix, no_values=no_values, filtr=filtr, **kwargs) + self.get_extra_values(prefix=prefix, no_values=no_values, filtr=filtr, + **kwargs) ) # do not provide KEYS and VALUES for sub-items if (prefix and prefix != self._prefix) or no_values: @@ -2400,14 +2410,14 @@ class DocumentTemplate(models.Model): get_values = "VALUES" in filtr if get_values: filtr = [] - extension = "txt" if get_values else self.template.name.split(".")[-1] + extension = "json" if get_values else self.template.name.split(".")[-1] tempdir = tempfile.mkdtemp("-ishtardocs") output_name = ( tempdir + os.path.sep + slugify(self.name.replace(" ", "_").lower()) + "-" - + datetime.date.today().strftime("%Y-%m-%d") + + datetime.datetime.now().strftime("%Y-%m-%d-%H%M") + "." + extension ) @@ -2425,8 +2435,7 @@ class DocumentTemplate(models.Model): sort_keys=True, skipkeys=True, ensure_ascii=False, - separators=("", " : "), - ).replace(" " * 4, "\t") + ) # initialize missing values if filtr: for k in filtr: |