[1.0.X] Fixed #9640, #10549: BooleanFields with choices, a default, and null=False now correctly doesn't generate a blank option. Backport of r10500 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10502 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jacob Kaplan-Moss 2009-04-10 19:57:11 +00:00
parent 7a283f790c
commit 2ab40287bc
2 changed files with 21 additions and 2 deletions

View File

@ -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)

View File

@ -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):
"""