mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-06-06 22:53:24 +03:00
Add tests for display_value
This commit is contained in:
parent
2f6e5d0509
commit
e9d9cb7011
|
@ -21,7 +21,7 @@ from django.utils import six
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.compat import DurationField as ModelDurationField
|
from rest_framework.compat import DurationField as ModelDurationField
|
||||||
from rest_framework.compat import unicode_repr
|
from rest_framework.compat import OrderedDict, unicode_repr
|
||||||
|
|
||||||
|
|
||||||
def dedent(blocktext):
|
def dedent(blocktext):
|
||||||
|
@ -546,6 +546,50 @@ class TestRelationalFieldMappings(TestCase):
|
||||||
self.assertEqual(unicode_repr(TestSerializer()), expected)
|
self.assertEqual(unicode_repr(TestSerializer()), expected)
|
||||||
|
|
||||||
|
|
||||||
|
class DisplayValueTargetModel(models.Model):
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return '%s Color' % (self.name)
|
||||||
|
|
||||||
|
|
||||||
|
class DisplayValueModel(models.Model):
|
||||||
|
color = models.ForeignKey(DisplayValueTargetModel)
|
||||||
|
|
||||||
|
|
||||||
|
class TestRelationalFieldDisplayValue(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
DisplayValueTargetModel.objects.bulk_create([
|
||||||
|
DisplayValueTargetModel(name='Red'),
|
||||||
|
DisplayValueTargetModel(name='Yellow'),
|
||||||
|
DisplayValueTargetModel(name='Green'),
|
||||||
|
])
|
||||||
|
|
||||||
|
def test_default_display_value(self):
|
||||||
|
class TestSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = DisplayValueModel
|
||||||
|
|
||||||
|
serializer = TestSerializer()
|
||||||
|
expected = OrderedDict([('1', 'Red Color'), ('2', 'Yellow Color'), ('3', 'Green Color')])
|
||||||
|
self.assertEqual(serializer.fields['color'].choices, expected)
|
||||||
|
|
||||||
|
def test_custom_display_value(self):
|
||||||
|
class TestField(serializers.PrimaryKeyRelatedField):
|
||||||
|
def display_value(self, instance):
|
||||||
|
return 'My %s Color' % (instance.name)
|
||||||
|
|
||||||
|
class TestSerializer(serializers.ModelSerializer):
|
||||||
|
color = TestField(queryset=DisplayValueTargetModel.objects.all())
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = DisplayValueModel
|
||||||
|
|
||||||
|
serializer = TestSerializer()
|
||||||
|
expected = OrderedDict([('1', 'My Red Color'), ('2', 'My Yellow Color'), ('3', 'My Green Color')])
|
||||||
|
self.assertEqual(serializer.fields['color'].choices, expected)
|
||||||
|
|
||||||
|
|
||||||
class TestIntegration(TestCase):
|
class TestIntegration(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.foreign_key_target = ForeignKeyTargetModel.objects.create(
|
self.foreign_key_target = ForeignKeyTargetModel.objects.create(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user