diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a86f529..500b9e8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,10 +4,10 @@ Changelog Only important changes are mentioned below. -v0.2 (unreleased) +v0.2 (2015-01-30) ----------------- -* ... +* Fixed problem with assertion on django.forms.ModelForm v0.1 (2015-01-21) diff --git a/formaldehyde/fieldsets.py b/formaldehyde/fieldsets.py index 85289df..a1c3656 100644 --- a/formaldehyde/fieldsets.py +++ b/formaldehyde/fieldsets.py @@ -1,5 +1,4 @@ from __future__ import unicode_literals -import itertools from django import forms from django.utils import six @@ -86,7 +85,7 @@ def next(self): #============================================================================== class FieldsetFormMixin(object): def fieldsets(self): - assert(isinstance(self, forms.Form)) + assert(isinstance(self, forms.BaseForm)) meta = getattr(self, 'MetaForm', None) if not meta or not meta.fieldsets: diff --git a/formaldehyde/readonly.py b/formaldehyde/readonly.py index 8357ee1..b68ea3e 100644 --- a/formaldehyde/readonly.py +++ b/formaldehyde/readonly.py @@ -9,6 +9,7 @@ class ReadonlyFormMixin(object): """ def set_readonly(self, is_readonly=True): - assert(isinstance(self, forms.Form)) + assert(isinstance(self, forms.BaseForm)) + for field in self.fields: self.fields[field].is_readonly = is_readonly diff --git a/formaldehyde/tests/test.py b/formaldehyde/tests/test.py index 0d94d40..9e8f1a5 100644 --- a/formaldehyde/tests/test.py +++ b/formaldehyde/tests/test.py @@ -56,6 +56,13 @@ class TestFieldsetFormRaises(FieldsetFormMixin): class TestReadonlyForm(ReadonlyFormMixin, forms.Form): first_name = forms.CharField(label='First name', max_length=100) +class TestReadonlyModelForm(ReadonlyFormMixin, forms.ModelForm): + first_name = forms.CharField(label='First name', max_length=100) + + class Meta: + model = ContentType + fields = "__all__" + class TestWhitespaceForm(StripWhitespaceFormMixin, forms.Form): first_name = forms.CharField(label='First name', max_length=100) last_name = forms.CharField(label='Last name', max_length=100) @@ -64,6 +71,18 @@ def full_clean(self): self.strip_whitespace_from_data() super(TestWhitespaceForm, self).full_clean() +class TestWhitespaceModelForm(StripWhitespaceFormMixin, forms.ModelForm): + first_name = forms.CharField(label='First name', max_length=100) + last_name = forms.CharField(label='Last name', max_length=100) + + class Meta: + model = ContentType + fields = "__all__" + + def full_clean(self): + self.strip_whitespace_from_data() + super(TestWhitespaceForm, self).full_clean() + #============================================================================== class FormalehydeTestCase(TestCase): @@ -114,24 +133,35 @@ def test_fieldset_model_form(self): def test_raises_form(self): form = TestFieldsetFormRaises() fieldsets = form.fieldsets() - with self.assertRaises(AssertionError): six.next(fieldsets) def test_readonly_form(self): form = TestReadonlyForm() - form.set_readonly(True) self.assertTrue(form.fields['first_name'].is_readonly) + form.set_readonly(False) + self.assertFalse(form.fields['first_name'].is_readonly) + def test_readonly_model_form(self): + form = TestReadonlyModelForm() + form.set_readonly(True) + self.assertTrue(form.fields['first_name'].is_readonly) form.set_readonly(False) self.assertFalse(form.fields['first_name'].is_readonly) def test_whitespace_form(self): form = TestWhitespaceForm(data={'first_name': ' John ', 'last_name': ' '}) self.assertFalse(form.is_valid()) - form = TestWhitespaceForm(data={'first_name': ' Foo ', 'last_name': ' Bar ack'}) self.assertTrue(form.is_valid()) self.assertEqual(form.cleaned_data['first_name'], 'Foo') self.assertEqual(form.cleaned_data['last_name'], 'Bar ack') + + def test_whitespace_model_form(self): + form = TestWhitespaceModelForm(data={'first_name': ' John ', 'last_name': ' '}) + self.assertFalse(form.is_valid()) + form = TestWhitespaceModelForm(data={'first_name': ' Foo ', 'last_name': ' Bar ack'}) + self.assertTrue(form.is_valid()) + self.assertEqual(form.cleaned_data['first_name'], 'Foo') + self.assertEqual(form.cleaned_data['last_name'], 'Bar ack') diff --git a/formaldehyde/whitespace.py b/formaldehyde/whitespace.py index b3dd6a2..d859a96 100644 --- a/formaldehyde/whitespace.py +++ b/formaldehyde/whitespace.py @@ -10,7 +10,7 @@ class StripWhitespaceFormMixin(object): """ def strip_whitespace_from_data(self): - assert(isinstance(self, forms.Form)) + assert(isinstance(self, forms.BaseForm)) if hasattr(self, 'data') and self.data: data = self.data.copy()