summaryrefslogtreecommitdiff
path: root/ishtar_common/wizards.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/wizards.py')
-rw-r--r--ishtar_common/wizards.py45
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)