From 1c11ee63459c4362affbd6a20f2ddf9c2ecd8dce Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Sat, 23 Feb 2013 20:11:47 +0100 Subject: [PATCH] Fixed #18829 -- Fixed ModelChoiceIterator length Thanks facundo.olano at gmail.com for the report and thikonom for the initial patch. --- django/forms/models.py | 3 ++- tests/modeltests/model_forms/tests.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/django/forms/models.py b/django/forms/models.py index 75d526d173..3905e9e902 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -917,7 +917,8 @@ class ModelChoiceIterator(object): yield self.choice(obj) def __len__(self): - return len(self.queryset) + return len(self.queryset) +\ + (1 if self.field.empty_label is not None else 0) def choice(self, obj): return (self.field.prepare_value(obj), self.field.label_from_instance(obj)) diff --git a/tests/modeltests/model_forms/tests.py b/tests/modeltests/model_forms/tests.py index efaf2981e1..f9ef61536c 100644 --- a/tests/modeltests/model_forms/tests.py +++ b/tests/modeltests/model_forms/tests.py @@ -989,6 +989,7 @@ class OldFormForXTests(TestCase): (c2.pk, "It's a test"), (c3.pk, 'Third'), (c4.pk, 'Fourth')]) + self.assertEqual(5, len(f.choices)) with self.assertRaises(ValidationError): f.clean('') with self.assertRaises(ValidationError):