Refs #29227 -- Simplified NullBooleanField by making it subclass BooleanField.

This commit is contained in:
Nick Pope 2018-03-19 21:41:04 -04:00 committed by Tim Graham
parent 6421bd702f
commit 281c0223b3
3 changed files with 4 additions and 36 deletions

View File

@ -251,10 +251,7 @@ class BooleanFieldListFilter(FieldListFilter):
} }
FieldListFilter.register( FieldListFilter.register(lambda f: isinstance(f, models.BooleanField), BooleanFieldListFilter)
lambda f: isinstance(f, (models.BooleanField, models.NullBooleanField)),
BooleanFieldListFilter
)
class ChoicesFieldListFilter(FieldListFilter): class ChoicesFieldListFilter(FieldListFilter):

View File

@ -396,7 +396,7 @@ def display_for_field(value, field, empty_value_display):
return dict(field.flatchoices).get(value, empty_value_display) return dict(field.flatchoices).get(value, empty_value_display)
# BooleanField needs special-case null-handling, so it comes before the # BooleanField needs special-case null-handling, so it comes before the
# general null test. # general null test.
elif isinstance(field, (models.BooleanField, models.NullBooleanField)): elif isinstance(field, models.BooleanField):
return _boolean_icon(value) return _boolean_icon(value)
elif value is None: elif value is None:
return empty_value_display return empty_value_display

View File

@ -1956,10 +1956,10 @@ class GenericIPAddressField(Field):
}) })
class NullBooleanField(Field): class NullBooleanField(BooleanField):
empty_strings_allowed = False
default_error_messages = { default_error_messages = {
'invalid': _("'%(value)s' value must be either None, True or False."), 'invalid': _("'%(value)s' value must be either None, True or False."),
'invalid_nullable': _("'%(value)s' value must be either None, True or False."),
} }
description = _("Boolean (Either True, False or None)") description = _("Boolean (Either True, False or None)")
@ -1977,35 +1977,6 @@ class NullBooleanField(Field):
def get_internal_type(self): def get_internal_type(self):
return "NullBooleanField" return "NullBooleanField"
def to_python(self, value):
if value is None:
return None
if value in (True, False):
return bool(value)
if value in ('None',):
return None
if value in ('t', 'True', '1'):
return True
if value in ('f', 'False', '0'):
return False
raise exceptions.ValidationError(
self.error_messages['invalid'],
code='invalid',
params={'value': value},
)
def get_prep_value(self, value):
value = super().get_prep_value(value)
if value is None:
return None
return self.to_python(value)
def formfield(self, **kwargs):
return super().formfield(**{
'form_class': forms.NullBooleanField,
**kwargs,
})
class PositiveIntegerRelDbTypeMixin: class PositiveIntegerRelDbTypeMixin: