diff options
Diffstat (limited to 'ishtar_common/wizards.py')
-rw-r--r-- | ishtar_common/wizards.py | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 55c9d0d9d..a237fb327 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -24,12 +24,22 @@ from django.contrib.formtools.wizard.views import NamedUrlWizardView from django.core.exceptions import ObjectDoesNotExist from django.core.files.images import ImageFile from django.db.models.fields.files import FileField +from django.db.models.fields.related import ManyToManyField from django.shortcuts import render_to_response from django.template import RequestContext -from django.utils.datastructures import MultiValueDict +from django.utils.datastructures import MultiValueDict as BaseMultiValueDict from django.utils.translation import ugettext_lazy as _ import models +class MultiValueDict(BaseMultiValueDict): + def get(self, *args, **kwargs): + v = super(MultiValueDict, self).getlist(*args, **kwargs) + if len(v) > 1: + v = ",".join(v) + else: + v = super(MultiValueDict, self).get(*args, **kwargs) + return v + class Wizard(NamedUrlWizardView): model = None label = '' @@ -211,7 +221,8 @@ class Wizard(NamedUrlWizardView): if type(value) in (tuple, list): values = value elif "," in unicode(value): - values = unicode(value).split(",") + values = unicode(value + ).strip('[').strip(']').split(",") else: values = [value] rendered_values = [] @@ -344,6 +355,12 @@ class Wizard(NamedUrlWizardView): isinstance(obj.__class__._meta.get_field(k), ImageFile)): if not dct[k]: dct[k] = None + if isinstance(obj.__class__._meta.get_field(k), + ManyToManyField): + if not dct[k]: + dct[k] = [] + elif type(dct[k]) not in (list, tuple): + dct[k] = [dct[k]] setattr(obj, k, dct[k]) try: obj.full_clean() @@ -516,7 +533,8 @@ class Wizard(NamedUrlWizardView): elif hasattr(form, 'extra_form') and hasattr(form.extra_form, 'fields')\ and form.extra_form.fields.keys(): frm = form.extra_form - elif hasattr(form, 'forms') and form.forms and form.forms[0].fields.keys(): + elif hasattr(form, 'forms') and form.forms \ + and form.forms[0].fields.keys(): frm = form.forms[0] if frm: first_field = frm.fields[frm.fields.keyOrder[0]] @@ -675,6 +693,12 @@ class Wizard(NamedUrlWizardView): value = obj break value = getattr(value, field) + if hasattr(value, 'all') and callable(value.all): + if not value.count(): + continue + initial.setlist(base_field, + [unicode(v.pk) for v in value.all()]) + continue if value == obj: continue if hasattr(value, 'pk'): |