diff options
Diffstat (limited to 'ishtar_common')
| -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: | 
