Fixed #9640, #10549: BooleanFields with choices, a default, and null=False now correctly doesn't generate a blank option.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10500 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
3524c74f0b
commit
a34b718192
|
@ -401,6 +401,12 @@ class BooleanField(Field):
|
||||||
return bool(value)
|
return bool(value)
|
||||||
|
|
||||||
def formfield(self, **kwargs):
|
def formfield(self, **kwargs):
|
||||||
|
# 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 = {'form_class': forms.BooleanField}
|
||||||
defaults.update(kwargs)
|
defaults.update(kwargs)
|
||||||
return super(BooleanField, self).formfield(**defaults)
|
return super(BooleanField, self).formfield(**defaults)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import datetime
|
import datetime
|
||||||
import unittest
|
import unittest
|
||||||
import django.test
|
import django.test
|
||||||
|
from django import forms
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from models import Foo, Bar, Whiz, BigD, BigS
|
from models import Foo, Bar, Whiz, BigD, BigS
|
||||||
|
@ -87,6 +88,18 @@ class BooleanFieldTests(unittest.TestCase):
|
||||||
def test_nullbooleanfield_get_db_prep_lookup(self):
|
def test_nullbooleanfield_get_db_prep_lookup(self):
|
||||||
self._test_get_db_prep_lookup(models.NullBooleanField())
|
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):
|
class ChoicesTests(django.test.TestCase):
|
||||||
def test_choices_and_field_display(self):
|
def test_choices_and_field_display(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue