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: | 
