diff options
-rw-r--r-- | ishtar_common/data_importer.py | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 6e71d69bb..8051ca300 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -1790,7 +1790,27 @@ class Importer(object): obj_dct[attr] = values else: for v in values: - getattr(obj, attr).add(v) + related_model = getattr(obj, attr) + # an intermediary model is used + if hasattr(related_model, 'through') and \ + not related_model.through._meta.auto_created: + # try to create it with default attributes + inter_model = related_model.through + target_name, item_name = None, None + for field in inter_model._meta.get_fields(): + rel_model = getattr(field, 'related_model', None) + # assume that the first found is correct... + if rel_model == v.__class__: + target_name = field.name + elif rel_model == obj.__class__: + item_name = field.name + assert target_name is not None + assert item_name is not None + inter_model.objects.get_or_create( + **{item_name: obj, target_name: v} + ) + else: + getattr(obj, attr).add(v) # force post save script v.save() if self.simulate: |