Commit 344cd865 by Tom Christie

Merge pull request #1250 from Ian-Foote/choice_field

Add choices to options metadata for ChoiceField.
parents fe4c7d40 8d09f560
...@@ -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.
......
...@@ -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):
""" """
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment