Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
0404f09a
Commit
0404f09a
authored
Sep 23, 2014
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
NullBooleanField
parent
f22d0afc
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
67 additions
and
5 deletions
+67
-5
rest_framework/fields.py
+36
-1
rest_framework/serializers.py
+1
-1
rest_framework/utils/field_mapping.py
+1
-1
tests/test_fields.py
+28
-1
tests/test_model_serializer.py
+1
-1
No files found.
rest_framework/fields.py
View file @
0404f09a
...
...
@@ -289,6 +289,10 @@ class BooleanField(Field):
TRUE_VALUES
=
set
((
't'
,
'T'
,
'true'
,
'True'
,
'TRUE'
,
'1'
,
1
,
True
))
FALSE_VALUES
=
set
((
'f'
,
'F'
,
'false'
,
'False'
,
'FALSE'
,
'0'
,
0
,
0.0
,
False
))
def
__init__
(
self
,
**
kwargs
):
assert
'allow_null'
not
in
kwargs
,
'`allow_null` is not a valid option. Use `NullBooleanField` instead.'
super
(
BooleanField
,
self
)
.
__init__
(
**
kwargs
)
def
to_internal_value
(
self
,
data
):
if
data
in
self
.
TRUE_VALUES
:
return
True
...
...
@@ -297,7 +301,38 @@ class BooleanField(Field):
self
.
fail
(
'invalid'
,
input
=
data
)
def
to_representation
(
self
,
value
):
if
value
is
None
:
if
value
in
self
.
TRUE_VALUES
:
return
True
elif
value
in
self
.
FALSE_VALUES
:
return
False
return
bool
(
value
)
class
NullBooleanField
(
Field
):
default_error_messages
=
{
'invalid'
:
_
(
'`{input}` is not a valid boolean.'
)
}
default_empty_html
=
None
TRUE_VALUES
=
set
((
't'
,
'T'
,
'true'
,
'True'
,
'TRUE'
,
'1'
,
1
,
True
))
FALSE_VALUES
=
set
((
'f'
,
'F'
,
'false'
,
'False'
,
'FALSE'
,
'0'
,
0
,
0.0
,
False
))
NULL_VALUES
=
set
((
'n'
,
'N'
,
'null'
,
'Null'
,
'NULL'
,
''
,
None
))
def
__init__
(
self
,
**
kwargs
):
assert
'allow_null'
not
in
kwargs
,
'`allow_null` is not a valid option.'
kwargs
[
'allow_null'
]
=
True
super
(
NullBooleanField
,
self
)
.
__init__
(
**
kwargs
)
def
to_internal_value
(
self
,
data
):
if
data
in
self
.
TRUE_VALUES
:
return
True
elif
data
in
self
.
FALSE_VALUES
:
return
False
elif
data
in
self
.
NULL_VALUES
:
return
None
self
.
fail
(
'invalid'
,
input
=
data
)
def
to_representation
(
self
,
value
):
if
value
in
self
.
NULL_VALUES
:
return
None
if
value
in
self
.
TRUE_VALUES
:
return
True
...
...
rest_framework/serializers.py
View file @
0404f09a
...
...
@@ -333,7 +333,7 @@ class ModelSerializer(Serializer):
models
.
FloatField
:
FloatField
,
models
.
ImageField
:
ImageField
,
models
.
IntegerField
:
IntegerField
,
models
.
NullBooleanField
:
BooleanField
,
models
.
NullBooleanField
:
Null
BooleanField
,
models
.
PositiveIntegerField
:
IntegerField
,
models
.
PositiveSmallIntegerField
:
IntegerField
,
models
.
SlugField
:
SlugField
,
...
...
rest_framework/utils/field_mapping.py
View file @
0404f09a
...
...
@@ -74,7 +74,7 @@ def get_field_kwargs(field_name, model_field):
kwargs
[
'choices'
]
=
model_field
.
flatchoices
return
kwargs
if
model_field
.
null
:
if
model_field
.
null
and
not
isinstance
(
model_field
,
models
.
NullBooleanField
)
:
kwargs
[
'allow_null'
]
=
True
if
model_field
.
blank
:
...
...
tests/test_fields.py
View file @
0404f09a
...
...
@@ -124,7 +124,8 @@ class TestBooleanField(FieldValues):
False
:
False
,
}
invalid_inputs
=
{
'foo'
:
[
'`foo` is not a valid boolean.'
]
'foo'
:
[
'`foo` is not a valid boolean.'
],
None
:
[
'This field may not be null.'
]
}
outputs
=
{
'true'
:
True
,
...
...
@@ -140,6 +141,32 @@ class TestBooleanField(FieldValues):
field
=
fields
.
BooleanField
()
class
TestNullBooleanField
(
FieldValues
):
"""
Valid and invalid values for `BooleanField`.
"""
valid_inputs
=
{
'true'
:
True
,
'false'
:
False
,
'null'
:
None
,
True
:
True
,
False
:
False
,
None
:
None
}
invalid_inputs
=
{
'foo'
:
[
'`foo` is not a valid boolean.'
],
}
outputs
=
{
'true'
:
True
,
'false'
:
False
,
'null'
:
None
,
True
:
True
,
False
:
False
,
None
:
None
}
field
=
fields
.
NullBooleanField
()
# String types...
class
TestCharField
(
FieldValues
):
...
...
tests/test_model_serializer.py
View file @
0404f09a
...
...
@@ -90,7 +90,7 @@ class TestRegularFieldMappings(TestCase):
email_field = EmailField(max_length=100)
float_field = FloatField()
integer_field = IntegerField()
null_boolean_field =
BooleanField(allow_null=True
)
null_boolean_field =
NullBooleanField(
)
positive_integer_field = IntegerField()
positive_small_integer_field = IntegerField()
slug_field = SlugField(max_length=100)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment