summaryrefslogtreecommitdiff
path: root/ishtar_common/wizards.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-08-28 12:11:41 +0200
committerÉtienne Loks <etienne.loks@proxience.com>2015-08-28 12:11:41 +0200
commit99209de93445c7f760b8f6f594c4700134aefb04 (patch)
treea667bc72d80244a271c403ceb490ef2c45aa4db6 /ishtar_common/wizards.py
parentb6178af0b0ffe1d8a93b8f117ab9802f097fcbb1 (diff)
downloadIshtar-99209de93445c7f760b8f6f594c4700134aefb04.tar.bz2
Ishtar-99209de93445c7f760b8f6f594c4700134aefb04.zip
Archaeological files: add departments to preventive forms - Wizards manage several many to many in one form
Diffstat (limited to 'ishtar_common/wizards.py')
-rw-r--r--ishtar_common/wizards.py37
1 files changed, 23 insertions, 14 deletions
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index 7da654b80..cc371b5e2 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -284,6 +284,8 @@ class Wizard(NamedUrlWizardView):
frm = form.forms[0]
if hasattr(frm, 'base_model') and frm.base_model:
whole_associated_models.append(frm.base_model)
+ elif hasattr(frm, 'base_models') and frm.base_models:
+ whole_associated_models += frm.base_models
else:
whole_associated_models += associated_models.keys()
fields = frm.fields.copy()
@@ -291,8 +293,9 @@ class Wizard(NamedUrlWizardView):
fields.pop('DELETE')
multi = len(fields) > 1
if multi:
- assert hasattr(frm, 'base_model'), \
- u"Must define a base_model for " + \
+ assert hasattr(frm, 'base_model') or \
+ hasattr(frm, 'base_models'), \
+ u"Must define a base_model(s) for " + \
unicode(frm.__class__)
for frm in form.forms:
if not frm.is_valid():
@@ -314,7 +317,11 @@ class Wizard(NamedUrlWizardView):
else:
m2m.append((key, value))
if multi and vals:
- m2m.append((frm.base_model, vals))
+ if hasattr(frm, 'base_models'):
+ for m in frm.base_models:
+ m2m.append((frm.base_model, m))
+ else:
+ m2m.append((frm.base_model, vals))
elif type(form.cleaned_data) == dict:
for key in form.cleaned_data:
if key.startswith('hidden_'):
@@ -336,15 +343,17 @@ class Wizard(NamedUrlWizardView):
value = model.objects.get(pk=value)
else:
value = None
- if hasattr(form, 'base_model') and form.base_model and \
- form.base_model == key:
- whole_associated_models.append(form.base_model)
+ if (hasattr(form, 'base_model') and form.base_model and
+ form.base_model == key) or (
+ hasattr(form, 'base_models') and
+ key in form.base_models):
+ whole_associated_models.append(key)
if value:
vals = value
if type(vals) not in (list, tuple):
vals = [vals]
for val in vals:
- m2m.append((form.base_model, val))
+ m2m.append((key, val))
else:
dct[key] = value
return self.save_model(dct, m2m, whole_associated_models, form_list,
@@ -445,27 +454,27 @@ class Wizard(NamedUrlWizardView):
obj.save()
m2m_items = {}
for model in whole_associated_models:
- getattr(obj, model+'s').clear()
+ getattr(obj, model + 's').clear()
for key, value in m2m:
if key not in m2m_items:
if type(key) == dict:
vals = []
- for item in getattr(obj, key+'s').all():
+ for item in getattr(obj, key + 's').all():
v = {}
for k in value.keys():
v[k] = getattr(item, k)
vals.append(v)
m2m_items[key] = vals
else:
- m2m_items[key] = getattr(obj, key+'s').all()
+ m2m_items[key] = getattr(obj, key + 's').all()
if value not in m2m_items[key]:
if type(value) == dict:
- model = getattr(obj, key+'s').model
+ model = getattr(obj, key + 's').model
if issubclass(model, models.BaseHistorizedItem):
value['history_modifier'] = self.request.user
value = model.objects.create(**value)
value.save()
- getattr(obj, key+'s').add(value)
+ getattr(obj, key + 's').add(value)
# necessary to manage interaction between models like
# material_index management for baseitems
obj.save()
@@ -979,7 +988,7 @@ class AccountWizard(Wizard):
continue
for key in form.cleaned_data:
if key == 'hidden_password' and form.cleaned_data[key]:
- datas[-1][1].append((_("New password"), "*"*8))
+ datas[-1][1].append((_("New password"), "*" * 8))
return datas
def done(self, form_list, **kwargs):
@@ -1032,7 +1041,7 @@ class AccountWizard(Wizard):
'password': dct['password'],
'app_name': app_name,
'site': site and site.domain or ""
- })
+ })
t = loader.get_template('account_activation_email.txt')
msg = t.render(context)
subject = _(u"[%(app_name)s] Account creation/modification") % {