diff options
Diffstat (limited to 'ishtar_common/data_importer.py')
| -rw-r--r-- | ishtar_common/data_importer.py | 84 | 
1 files changed, 44 insertions, 40 deletions
| diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 333a81877..b5a9d92f0 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -781,51 +781,55 @@ class Importer(object):                  field_object, model, direct, m2m = \                                      cls._meta.get_field_by_name(attribute)                  if m2m: -                    val = data.pop(attribute) +                    many_values = data.pop(attribute)                      if hasattr(field_object, 'rel'):                          model = field_object.rel.to                      elif hasattr(field_object, 'to'):                          model = field_object.to -                    if val.__class__ == model: -                        m2ms.append((attribute, val)) -                    elif val.__class__ != model and type(val) == dict: -                        vals = [] - -                        # contruct many dict for each values -                        default_dict = {} -                        ## init with simple values that will be duplicated -                        for key in val.keys(): -                            if type(val[key]) not in (list, tuple): -                                default_dict[key] = val[key] -                        ## manage multiple values -                        for key in val.keys(): -                            if type(val[key]) in (list, tuple): -                                for idx, v in enumerate(val[key]): -                                    if len(vals) <= idx: -                                        vals.append(default_dict.copy()) -                                    vals[idx][key] = v - -                        # check that m2m are not empty -                        notempty = False -                        for dct in vals: -                            for k in dct: -                                if dct[k] not in ("", None): -                                    notempty = True -                                    break -                        if not notempty: -                            continue - -                        for v in vals: -                            v['defaults'] = v.get('defaults', {}) -                            if 'history_modifier' in \ -                                    model._meta.get_all_field_names(): -                                v['defaults']['history_modifier'] = \ +                    if type(many_values) not in (list, tuple): +                        many_values = [many_values] +                    for val in many_values: +                        if val.__class__ == model: +                            m2ms.append((attribute, val)) +                        elif val.__class__ != model and type(val) == dict: +                            vals = [] + +                            # contruct many dict for each values +                            default_dict = {} +                            ## init with simple values that will be duplicated +                            for key in val.keys(): +                                if type(val[key]) not in (list, tuple): +                                    default_dict[key] = val[key] +                            ## manage multiple values +                            for key in val.keys(): +                                if type(val[key]) in (list, tuple): +                                    for idx, v in enumerate(val[key]): +                                        if len(vals) <= idx: +                                            vals.append(default_dict.copy()) +                                        vals[idx][key] = v + +                            # check that m2m are not empty +                            notempty = False +                            for dct in vals: +                                for k in dct: +                                    if dct[k] not in ("", None): +                                        notempty = True +                                        break +                            if not notempty: +                                continue + +                            for v in vals: +                                v['defaults'] = v.get('defaults', {}) +                                if 'history_modifier' in \ +                                        model._meta.get_all_field_names(): +                                    v['defaults']['history_modifier'] = \                                                            self.history_modifier -                                v, created = model.objects.get_or_create(**v) -                                if self.import_instance \ -                                   and hasattr(v, 'imports'): -                                    v.imports.add(self.import_instance) -                                m2ms.append((attribute, v)) +                                    v, created = model.objects.get_or_create( +                                                                            **v) +                                    if self.import_instance \ +                                       and hasattr(v, 'imports'): +                                        v.imports.add(self.import_instance) +                                    m2ms.append((attribute, v))                  elif hasattr(field_object, 'rel') and field_object.rel and \                     type(data[attribute]) == dict:                      c_path.append(attribute) | 
