diff options
-rw-r--r-- | CHANGES.md | 1 | ||||
-rw-r--r-- | ishtar_common/models_imports.py | 24 |
2 files changed, 18 insertions, 7 deletions
diff --git a/CHANGES.md b/CHANGES.md index 20dd86081..3cd5cc0d8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -42,6 +42,7 @@ Ishtar changelog - Profile: do not display geo item list when mapping is deactivated - Explicit message on associated container deletion when a warehouse is deleted - Administrative act: add a warning when associated item is deleted +- Imports: register automatically type models for export - Sheet: - fix treatment and file treatment sheet display (bad QR code link) - Operation - statistics number of parcels fix diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index 6451206a2..76121d846 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -39,7 +39,7 @@ from django.contrib.gis.db import models from django.contrib.gis.gdal.error import GDALException from django.contrib.gis.geos import GEOSGeometry from django.contrib.gis.geos.error import GEOSException -from django.core.exceptions import ValidationError +from django.core.exceptions import ValidationError, SuspiciousOperation from django.core.files import File from django.core.files.base import ContentFile from django.core.validators import validate_comma_separated_integer_list @@ -1073,16 +1073,26 @@ class FormaterType(models.Model): if self.many_split: kwargs["many_split"] = self.many_split if self.formater_type == "TypeFormater": - if self.options not in TARGET_MODELS_KEYS: + if self.options in dir(): + model = dir()[self.options] + else: + try: + model = import_class(self.options) + except (AttributeError, SuspiciousOperation): + logger.warning( + "**WARN FormaterType.get_formater_type**: {} " + "is not in valid.".format(self.options) + ) + return + # must be explicit if non general type + if self.options not in TARGET_MODELS_KEYS and \ + not [True for m in model.__mro__ if m.__name__ == "GeneralType"]: logger.warning( "**WARN FormaterType.get_formater_type**: {} " - "is not in TARGET_MODELS_KEYS".format(self.options) + "is not in valid.".format(self.options) ) return - if self.options in dir(): - model = dir()[self.options] - else: - model = import_class(self.options) + return TypeFormater(model, **kwargs) elif self.formater_type == "UnicodeFormater": if self.options: |