summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/fields/__init__.py8
-rw-r--r--tests/regressiontests/model_fields/tests.py15
2 files changed, 21 insertions, 2 deletions
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 8da95bb4c4..7ed497cb09 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -393,7 +393,13 @@ class BooleanField(Field):
return bool(value)
def formfield(self, **kwargs):
- defaults = {'form_class': forms.BooleanField}
+ # Unlike most fields, BooleanField figures out include_blank from
+ # self.null instead of self.blank.
+ if self.choices:
+ include_blank = self.null or not (self.has_default() or 'initial' in kwargs)
+ defaults = {'choices': self.get_choices(include_blank=include_blank)}
+ else:
+ defaults = {'form_class': forms.BooleanField}
defaults.update(kwargs)
return super(BooleanField, self).formfield(**defaults)
diff --git a/tests/regressiontests/model_fields/tests.py b/tests/regressiontests/model_fields/tests.py
index ec52668e60..3d232ffeee 100644
--- a/tests/regressiontests/model_fields/tests.py
+++ b/tests/regressiontests/model_fields/tests.py
@@ -1,6 +1,7 @@
import datetime
import unittest
import django.test
+from django import forms
from django.db import models
from django.core.exceptions import ValidationError
from models import Foo, Bar, Whiz, BigD, BigS
@@ -83,10 +84,22 @@ class BooleanFieldTests(unittest.TestCase):
def test_booleanfield_get_db_prep_lookup(self):
self._test_get_db_prep_lookup(models.BooleanField())
-
+
def test_nullbooleanfield_get_db_prep_lookup(self):
self._test_get_db_prep_lookup(models.NullBooleanField())
+ def test_booleanfield_choices_blank(self):
+ """
+ Test that BooleanField with choices and defaults doesn't generate a
+ formfield with the blank option (#9640, #10549).
+ """
+ choices = [(1, u'Si'), (2, 'No')]
+ f = models.BooleanField(choices=choices, default=1, null=True)
+ self.assertEqual(f.formfield().choices, [('', '---------')] + choices)
+
+ f = models.BooleanField(choices=choices, default=1, null=False)
+ self.assertEqual(f.formfield().choices, choices)
+
class ChoicesTests(django.test.TestCase):
def test_choices_and_field_display(self):
"""