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
344cd865
Commit
344cd865
authored
Dec 03, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1250 from Ian-Foote/choice_field
Add choices to options metadata for ChoiceField.
parents
fe4c7d40
8d09f560
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
27 additions
and
4 deletions
+27
-4
rest_framework/fields.py
+5
-0
rest_framework/tests/test_fields.py
+22
-4
No files found.
rest_framework/fields.py
View file @
344cd865
...
@@ -514,6 +514,11 @@ class ChoiceField(WritableField):
...
@@ -514,6 +514,11 @@ class ChoiceField(WritableField):
choices
=
property
(
_get_choices
,
_set_choices
)
choices
=
property
(
_get_choices
,
_set_choices
)
def
metadata
(
self
):
data
=
super
(
ChoiceField
,
self
)
.
metadata
()
data
[
'choices'
]
=
[{
'value'
:
v
,
'display_name'
:
n
}
for
v
,
n
in
self
.
choices
]
return
data
def
validate
(
self
,
value
):
def
validate
(
self
,
value
):
"""
"""
Validates that the input is in self.choices.
Validates that the input is in self.choices.
...
...
rest_framework/tests/test_fields.py
View file @
344cd865
...
@@ -707,20 +707,21 @@ class ChoiceFieldTests(TestCase):
...
@@ -707,20 +707,21 @@ class ChoiceFieldTests(TestCase):
self
.
assertEqual
(
f
.
choices
,
models
.
fields
.
BLANK_CHOICE_DASH
+
SAMPLE_CHOICES
)
self
.
assertEqual
(
f
.
choices
,
models
.
fields
.
BLANK_CHOICE_DASH
+
SAMPLE_CHOICES
)
def
test_invalid_choice_model
(
self
):
def
test_invalid_choice_model
(
self
):
s
=
ChoiceFieldModelSerializer
(
data
=
{
'choice'
:
'wrong_value'
})
s
=
ChoiceFieldModelSerializer
(
data
=
{
'choice'
:
'wrong_value'
})
self
.
assertFalse
(
s
.
is_valid
())
self
.
assertFalse
(
s
.
is_valid
())
self
.
assertEqual
(
s
.
errors
,
{
'choice'
:
[
'Select a valid choice. wrong_value is not one of the available choices.'
]})
self
.
assertEqual
(
s
.
errors
,
{
'choice'
:
[
'Select a valid choice. wrong_value is not one of the available choices.'
]})
self
.
assertEqual
(
s
.
data
[
'choice'
],
''
)
self
.
assertEqual
(
s
.
data
[
'choice'
],
''
)
def
test_empty_choice_model
(
self
):
def
test_empty_choice_model
(
self
):
"""
"""
Test that the 'empty' value is correctly passed and used depending on the 'null' property on the model field.
Test that the 'empty' value is correctly passed and used depending on
the 'null' property on the model field.
"""
"""
s
=
ChoiceFieldModelSerializer
(
data
=
{
'choice'
:
''
})
s
=
ChoiceFieldModelSerializer
(
data
=
{
'choice'
:
''
})
self
.
assertTrue
(
s
.
is_valid
())
self
.
assertTrue
(
s
.
is_valid
())
self
.
assertEqual
(
s
.
data
[
'choice'
],
''
)
self
.
assertEqual
(
s
.
data
[
'choice'
],
''
)
s
=
ChoiceFieldModelWithNullSerializer
(
data
=
{
'choice'
:
''
})
s
=
ChoiceFieldModelWithNullSerializer
(
data
=
{
'choice'
:
''
})
self
.
assertTrue
(
s
.
is_valid
())
self
.
assertTrue
(
s
.
is_valid
())
self
.
assertEqual
(
s
.
data
[
'choice'
],
None
)
self
.
assertEqual
(
s
.
data
[
'choice'
],
None
)
...
@@ -740,6 +741,23 @@ class ChoiceFieldTests(TestCase):
...
@@ -740,6 +741,23 @@ class ChoiceFieldTests(TestCase):
self
.
assertEqual
(
f
.
from_native
(
''
),
None
)
self
.
assertEqual
(
f
.
from_native
(
''
),
None
)
self
.
assertEqual
(
f
.
from_native
(
None
),
None
)
self
.
assertEqual
(
f
.
from_native
(
None
),
None
)
def
test_metadata_choices
(
self
):
"""
Make sure proper choices are included in the field's metadata.
"""
choices
=
[{
'value'
:
v
,
'display_name'
:
n
}
for
v
,
n
in
SAMPLE_CHOICES
]
f
=
serializers
.
ChoiceField
(
choices
=
SAMPLE_CHOICES
)
self
.
assertEqual
(
f
.
metadata
()[
'choices'
],
choices
)
def
test_metadata_choices_not_required
(
self
):
"""
Make sure proper choices are included in the field's metadata.
"""
choices
=
[{
'value'
:
v
,
'display_name'
:
n
}
for
v
,
n
in
models
.
fields
.
BLANK_CHOICE_DASH
+
SAMPLE_CHOICES
]
f
=
serializers
.
ChoiceField
(
required
=
False
,
choices
=
SAMPLE_CHOICES
)
self
.
assertEqual
(
f
.
metadata
()[
'choices'
],
choices
)
class
EmailFieldTests
(
TestCase
):
class
EmailFieldTests
(
TestCase
):
"""
"""
...
...
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