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