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