summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorStephen Burrows <stephen.r.burrows@gmail.com>2012-10-03 19:50:12 +0300
committerAnssi Kääriäinen <akaariai@gmail.com>2012-10-03 20:47:35 +0300
commit218abcc9e550d266a9979e10f562fc21b8f34c6a (patch)
tree470b36198da19a8fb5ebe6978bf280ece1801b21 /tests
parentd25a599dca9b7644b238f6c89a66545dfdabe393 (diff)
Fixed #14567 -- Made ModelMultipleChoiceField return EmptyQuerySet as empty value
Diffstat (limited to 'tests')
-rw-r--r--tests/modeltests/model_forms/tests.py5
-rw-r--r--tests/regressiontests/forms/models.py6
-rw-r--r--tests/regressiontests/forms/tests/models.py23
3 files changed, 30 insertions, 4 deletions
diff --git a/tests/modeltests/model_forms/tests.py b/tests/modeltests/model_forms/tests.py
index 038ce32287..947d0cf3c3 100644
--- a/tests/modeltests/model_forms/tests.py
+++ b/tests/modeltests/model_forms/tests.py
@@ -8,6 +8,7 @@ from django import forms
from django.core.files.uploadedfile import SimpleUploadedFile
from django.core.validators import ValidationError
from django.db import connection
+from django.db.models.query import EmptyQuerySet
from django.forms.models import model_to_dict
from django.utils.unittest import skipUnless
from django.test import TestCase
@@ -1035,8 +1036,8 @@ class OldFormForXTests(TestCase):
f.clean([c6.id])
f = forms.ModelMultipleChoiceField(Category.objects.all(), required=False)
- self.assertEqual(f.clean([]), [])
- self.assertEqual(f.clean(()), [])
+ self.assertIsInstance(f.clean([]), EmptyQuerySet)
+ self.assertIsInstance(f.clean(()), EmptyQuerySet)
with self.assertRaises(ValidationError):
f.clean(['10'])
with self.assertRaises(ValidationError):
diff --git a/tests/regressiontests/forms/models.py b/tests/regressiontests/forms/models.py
index 2f3ee9fa31..6e9c269356 100644
--- a/tests/regressiontests/forms/models.py
+++ b/tests/regressiontests/forms/models.py
@@ -63,6 +63,12 @@ class ChoiceFieldModel(models.Model):
multi_choice_int = models.ManyToManyField(ChoiceOptionModel, blank=False, related_name='multi_choice_int',
default=lambda: [1])
+class OptionalMultiChoiceModel(models.Model):
+ multi_choice = models.ManyToManyField(ChoiceOptionModel, blank=False, related_name='not_relevant',
+ default=lambda: ChoiceOptionModel.objects.filter(name='default'))
+ multi_choice_optional = models.ManyToManyField(ChoiceOptionModel, blank=True, null=True,
+ related_name='not_relevant2')
+
class FileModel(models.Model):
file = models.FileField(storage=temp_storage, upload_to='tests')
diff --git a/tests/regressiontests/forms/tests/models.py b/tests/regressiontests/forms/tests/models.py
index c351509cee..be75643b28 100644
--- a/tests/regressiontests/forms/tests/models.py
+++ b/tests/regressiontests/forms/tests/models.py
@@ -11,7 +11,7 @@ from django.test import TestCase
from django.utils import six
from ..models import (ChoiceOptionModel, ChoiceFieldModel, FileModel, Group,
- BoundaryModel, Defaults)
+ BoundaryModel, Defaults, OptionalMultiChoiceModel)
class ChoiceFieldForm(ModelForm):
@@ -19,6 +19,11 @@ class ChoiceFieldForm(ModelForm):
model = ChoiceFieldModel
+class OptionalMultiChoiceModelForm(ModelForm):
+ class Meta:
+ model = OptionalMultiChoiceModel
+
+
class FileForm(Form):
file1 = FileField()
@@ -34,6 +39,21 @@ class TestTicket12510(TestCase):
field = ModelChoiceField(Group.objects.order_by('-name'))
self.assertEqual('a', field.clean(self.groups[0].pk).name)
+
+class TestTicket14567(TestCase):
+ """
+ Check that the return values of ModelMultipleChoiceFields are QuerySets
+ """
+ def test_empty_queryset_return(self):
+ "If a model's ManyToManyField has blank=True and is saved with no data, a queryset is returned."
+ form = OptionalMultiChoiceModelForm({'multi_choice_optional': '', 'multi_choice': ['1']})
+ self.assertTrue(form.is_valid())
+ # Check that the empty value is a QuerySet
+ self.assertTrue(isinstance(form.cleaned_data['multi_choice_optional'], models.query.QuerySet))
+ # While we're at it, test whether a QuerySet is returned if there *is* a value.
+ self.assertTrue(isinstance(form.cleaned_data['multi_choice'], models.query.QuerySet))
+
+
class ModelFormCallableModelDefault(TestCase):
def test_no_empty_option(self):
"If a model's ForeignKey has blank=False and a default, no empty option is created (Refs #10792)."
@@ -103,7 +123,6 @@ class ModelFormCallableModelDefault(TestCase):
<input type="hidden" name="initial-multi_choice_int" value="3" id="initial-id_multi_choice_int_1" /> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></p>""")
-
class FormsModelTestCase(TestCase):
def test_unicode_filename(self):
# FileModel with unicode filename and data #########################