summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-12-05 18:11:39 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-12-05 18:11:39 +0100
commitfcf63a61bdcab906aad45c69eb95167850e2c40a (patch)
tree130e1e4178642d87e5337d9473f975a14611d3ff
parent9de3367a92a1f22bdd843e578b134cd39aa4c8fa (diff)
downloadIshtar-fcf63a61bdcab906aad45c69eb95167850e2c40a.tar.bz2
Ishtar-fcf63a61bdcab906aad45c69eb95167850e2c40a.zip
Fix bad initialization of multiple checkbox field
-rw-r--r--archaeological_finds/forms.py10
-rw-r--r--ishtar_common/forms.py4
-rw-r--r--ishtar_common/widgets.py17
3 files changed, 23 insertions, 8 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index a37d6b5f6..3fc8d7c01 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -117,13 +117,13 @@ class FindForm(ManageOldType, forms.Form):
model=models.ObjectType, label=_(u"Object types"), required=False)
preservation_to_consider = forms.MultipleChoiceField(
label=_(u"Preservation type"), choices=[],
- widget=forms.CheckboxSelectMultiple, required=False)
+ widget=widgets.CheckboxSelectMultiple, required=False)
integritie = forms.MultipleChoiceField(
label=_(u"Integrity / interest"), choices=[],
- widget=forms.CheckboxSelectMultiple, required=False)
+ widget=widgets.CheckboxSelectMultiple, required=False)
remarkabilitie = forms.MultipleChoiceField(
label=_(u"Remarkability"), choices=[],
- widget=forms.CheckboxSelectMultiple, required=False)
+ widget=widgets.CheckboxSelectMultiple, required=False)
topographic_reference_point = forms.CharField(
label=_(u"Point of topographic reference"),
required=False, max_length=20
@@ -246,7 +246,7 @@ class FindSelect(TableSelect):
validators=[valid_id(ArchaeologicalSite)])
ope_relation_types = forms.MultipleChoiceField(
label=_(u"Search within related operations"), choices=[],
- widget=forms.CheckboxSelectMultiple)
+ widget=widgets.CheckboxSelectMultiple)
datings__period = forms.ChoiceField(label=_(u"Period"), choices=[])
# TODO search by warehouse
material_types = forms.ChoiceField(label=_(u"Material type"), choices=[])
@@ -654,7 +654,7 @@ class BaseTreatmentForm(ManageOldType, forms.Form):
validators.MaxValueValidator(2100)])
treatment_type = forms.MultipleChoiceField(
label=_(u"Treatment type"), choices=[],
- widget=forms.CheckboxSelectMultiple)
+ widget=widgets.CheckboxSelectMultiple)
target_is_basket = forms.NullBooleanField(label=_(u"Target"))
person = forms.IntegerField(
label=_(u"Responsible"),
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index 043b03f61..42d74f9ef 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -33,6 +33,7 @@ from django.utils.translation import ugettext_lazy as _
import models
import widgets
+from wizards import MultiValueDict
# from formwizard.forms import NamedUrlSessionFormWizard
@@ -224,7 +225,6 @@ class ManageOldType(object):
if prefix not in k:
continue
new_k = k[len(prefix) + 1:]
- items = []
if hasattr(kwargs['data'], 'getlist'):
items = kwargs['data'].getlist(k)
else:
@@ -238,7 +238,6 @@ class ManageOldType(object):
if 'initial' in kwargs and kwargs['initial']:
for k in kwargs['initial']:
if k not in self.init_data or not self.init_data[k]:
- items = []
if hasattr(kwargs['initial'], 'getlist'):
items = kwargs['initial'].getlist(k)
else:
@@ -249,6 +248,7 @@ class ManageOldType(object):
if k not in self.init_data:
self.init_data[k] = []
self.init_data[k].append(val)
+ self.init_data = MultiValueDict(self.init_data)
super(ManageOldType, self).__init__(*args, **kwargs)
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py
index e21ce7a2a..7696d67da 100644
--- a/ishtar_common/widgets.py
+++ b/ishtar_common/widgets.py
@@ -24,7 +24,8 @@ from django.conf import settings
from django.core.urlresolvers import reverse
from django.db.models import fields
from django.forms import ClearableFileInput
-from django.forms.widgets import flatatt
+from django.forms.widgets import flatatt, \
+ CheckboxSelectMultiple as CheckboxSelectMultipleBase
from django.template import Context, loader
from django.template.defaultfilters import slugify
from django.utils.encoding import smart_unicode
@@ -56,6 +57,20 @@ class Select2Multiple(forms.SelectMultiple):
return super(Select2Multiple, self).render(name, value, attrs,
choices)
+class CheckboxSelectMultiple(CheckboxSelectMultipleBase):
+ """
+ Fix initialization bug.
+ Should be corrected on recent Django version.
+ TODO: test and remove (test case: treatment type not keep on modif)
+ """
+ def render(self, name, value, attrs=None, choices=()):
+ if type(value) in (str, unicode):
+ value = value.split(',')
+ if type(value) not in (list, tuple):
+ value = [value]
+ return super(CheckboxSelectMultiple, self).render(name, value, attrs,
+ choices)
+
class MultipleAutocompleteField(forms.MultipleChoiceField):
def __init__(self, *args, **kwargs):