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)
|
||||
|
||||
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.update(kwargs)
|
||||
return super(BooleanField, self).formfield(**defaults)
|
||||
|
|
|
@ -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
|
||||
|
@ -87,6 +88,18 @@ class BooleanFieldTests(unittest.TestCase):
|
|||
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):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue