diff options
| -rw-r--r-- | ishtar_common/data_importer.py | 13 | ||||
| -rw-r--r-- | ishtar_common/forms_common.py | 8 | ||||
| -rw-r--r-- | ishtar_common/models_imports.py | 20 | 
3 files changed, 29 insertions, 12 deletions
| diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index b500baa3f..179dfc329 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -373,7 +373,7 @@ class StrChoiceFormater(Formater, ChoiceChecker):          q = self.get_db_target_query(user) -        for target_key in q.all(): +        for target_key in list(q.all()):              key = target_key.key              if not self.strict:                  key = slugify(key) @@ -381,10 +381,13 @@ class StrChoiceFormater(Formater, ChoiceChecker):                  continue              v = target_key.value              if self.model and v and type(v) in (int, str): -                try: -                    v = self.model.objects.get(txt_idx=v) -                except: -                    v = self.model.objects.get(pk=v) +                q = self.model.objects.filter(txt_idx=v) +                if not q.count(): +                    q = self.model.objects.filter(pk=v) +                    if not q.count(): +                        target_key.delete() +                        continue +                v = q.all()[0]              self.equiv_dict[key] = v      def prepare(self, value): diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 2df825594..242607732 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -48,6 +48,7 @@ from .forms import FinalForm, FormSet, reverse_lazy, name_validator, \      FormSetWithDeleteSwitches, BSForm, get_data_from_formset, \      file_size_validator, HistorySelect, CustomFormSearch, QAForm, IshtarForm, \      MultiSearchForm, LockForm +from ishtar_common.data_importer import ImporterError  from ishtar_common.utils import is_downloadable, clean_session_cache, \      max_size_help @@ -230,7 +231,7 @@ class TargetKeyForm(forms.ModelForm):              self.fields['value'].choices = list(                  instance.target.get_choices())              self.fields['value'].choices.insert( -                1, (self.NULL_VALUE, _(u"Set to NULL"))) +                1, (self.NULL_VALUE, _("Set to NULL")))          self.fields['key'].required = False          self.fields['target'].required = False @@ -267,7 +268,10 @@ class TargetKeyForm(forms.ModelForm):              return self.cleaned_data['key']      def save(self, commit=True): -        super(TargetKeyForm, self).save(commit) +        try: +            super(TargetKeyForm, self).save(commit) +        except ImporterError: +            return          if not self.cleaned_data.get('value') or not self.user:              return          if self.cleaned_data['value'] == self.NULL_VALUE: diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index b4749fc2c..d64b8441c 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -271,7 +271,7 @@ def get_associated_model(parent_model, keys):          OBJECT_CLS = parent_model      fields = get_model_fields(OBJECT_CLS)      for idx, item in enumerate(keys): -        if item in (u"-", u""): +        if item in ("-", ""):              model = None          elif not idx:              if item not in fields: @@ -287,6 +287,14 @@ def get_associated_model(parent_model, keys):              if type(field) == ModelBase:                  model = field          else: +            if not model: +                raise ImporterError( +                    str(_("Importer configuration error: " +                          "\"{}\" is not available for \"{}\"." +                          " Check your default and column " +                          "configuration")).format( +                        "__".join(keys[1:]), +                        OBJECT_CLS.__name__))              return get_associated_model(model, keys[1:])      return model @@ -576,6 +584,8 @@ class ImportTarget(models.Model):      @property      def associated_model(self): +        if self.target.startswith("data__"): +            return          try:              return get_associated_model(                  self.column.importer_type.associated_models.klass, @@ -631,9 +641,9 @@ class TargetKey(models.Model):      (associated_import, associated_user and associated_group are empty).      """      target = models.ForeignKey(ImportTarget, related_name='keys') -    key = models.TextField(_(u"Key")) -    value = models.TextField(_(u"Value"), blank=True, null=True) -    is_set = models.BooleanField(_(u"Is set"), default=False) +    key = models.TextField(_("Key")) +    value = models.TextField(_("Value"), blank=True, null=True) +    is_set = models.BooleanField(_("Is set"), default=False)      associated_import = models.ForeignKey('Import', blank=True, null=True)      associated_user = models.ForeignKey('IshtarUser', blank=True, null=True)      associated_group = models.ForeignKey(TargetKeyGroup, blank=True, null=True) @@ -671,10 +681,10 @@ class TargetKey(models.Model):          obj = super(TargetKey, self).save(*args, **kwargs)          if not self.value:              return obj +        v = None          associated_model = self.target.associated_model          if associated_model and hasattr(self.target.associated_model,                                          "add_key"): -            v = None              # pk is given              try:                  v = self.target.associated_model.objects.get( | 
