diff options
Diffstat (limited to 'ishtar_common/wizards.py')
| -rw-r--r-- | ishtar_common/wizards.py | 45 | 
1 files changed, 30 insertions, 15 deletions
| diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 30aa014c4..eac8d1868 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -447,18 +447,18 @@ class Wizard(IshtarWizard):                      # regroup each line                      displayed_values = []                      for lbl, value, cls in current_form_data: -                        displayed_value = u"" +                        displayed_value = ""                          if lbl.strip(): -                            displayed_value = u"<strong>{}{}</strong> ".format( -                                 lbl, _(u":")) +                            displayed_value = "<strong>{}{}</strong> ".format( +                                 lbl, _(":"))                          displayed_value += str(value)                          displayed_values.append(displayed_value) -                    value = u" ; ".join(displayed_values) +                    value = " ; ".join(displayed_values)                      if is_deleted: -                        value = u"<span class='text-danger'>{}</span>".format( +                        value = "<span class='text-danger'>{}</span>".format(                              value) -                    deleted = u"<span class='text-danger'>{}</span>".format( -                        _(u"Deleted")) if is_deleted else "" +                    deleted = "<span class='text-danger'>{}</span>".format( +                        _("Deleted")) if is_deleted else ""                      form_datas.append((mark_safe(deleted), mark_safe(value),                                         ''))                  else: @@ -502,7 +502,7 @@ class Wizard(IshtarWizard):                      if multi:                          assert hasattr(frm, 'base_model') or \                              hasattr(frm, 'base_models'), \ -                            u"Must define a base_model(s) for " + \ +                            "Must define a base_model(s) for " + \                              str(frm.__class__)                  for frm in form.forms:                      if not frm.is_valid(): @@ -514,9 +514,14 @@ class Wizard(IshtarWizard):                          frm.cleaned_data.pop('DELETE')                      for key in frm.cleaned_data:                          value = frm.cleaned_data[key] -                        if value is None or value in ['']: -                            continue -                        if key in associated_models: +                        dct_key = key +                        value_is_empty = value is None or value in [''] +                        if value_is_empty: +                            if multi: +                                dct_key = "__empty-" + key +                            else: +                                continue +                        if not value_is_empty and key in associated_models:                              if type(value) in (tuple, list):                                  value = [                                      associated_models[key].objects.get(pk=v) @@ -526,7 +531,7 @@ class Wizard(IshtarWizard):                                  value = associated_models[key].objects.get(                                      pk=value)                          if multi: -                            vals[key] = value +                            vals[dct_key] = value                          else:                              m2m.append((key, value))                      if multi and vals: @@ -808,7 +813,7 @@ class Wizard(IshtarWizard):                      # not m2m -> foreign key                      if not hasattr(related_model, 'clear'):                          assert hasattr(model, 'MAIN_ATTR'), \ -                            u"Must define a MAIN_ATTR for " + \ +                            "Must define a MAIN_ATTR for " + \                              str(model.__class__)                          value[getattr(model, 'MAIN_ATTR')] = obj @@ -818,11 +823,19 @@ class Wizard(IshtarWizard):                          for old_item in old_m2ms[key]:                              is_ok = True                              for k in value: +                                new_val = value[k] +                                val_empty = False +                                if k.startswith("__empty-"): +                                    val_empty = True +                                    k = k[len("__empty-"):]                                  if not hasattr(old_item, k):                                      continue -                                if is_ok and getattr(old_item, k) != value[k]: +                                old_val = getattr(old_item, k) +                                if (val_empty and (old_val is None +                                                   or old_val == "") +                                        ) or old_val != new_val:                                      is_ok = False -                                    continue +                                    break                              if is_ok:                                  my_old_item = old_item                                  break @@ -874,6 +887,8 @@ class Wizard(IshtarWizard):                              if type(value[k]) in (list, tuple):                                  m2m_values[k] = value.pop(k) +                        value = dict([(k, value[k]) for k in value +                                      if not k.startswith("__empty-")])                          if get_or_create:                              value, created = model.objects.get_or_create(                                  **value) | 
