mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-04 12:30:11 +03:00
Add class SerializerLambdaField that works like SerializerMethodField but
with a lambda
This commit is contained in:
parent
b2fdc9fa0f
commit
e2031c0e74
|
@ -1038,3 +1038,17 @@ class SerializerMethodField(Field):
|
||||||
def field_to_native(self, obj, field_name):
|
def field_to_native(self, obj, field_name):
|
||||||
value = getattr(self.parent, self.method_name)(obj)
|
value = getattr(self.parent, self.method_name)(obj)
|
||||||
return self.to_native(value)
|
return self.to_native(value)
|
||||||
|
|
||||||
|
|
||||||
|
class SerializerLambdaField(Field):
|
||||||
|
"""
|
||||||
|
A field that gets its value by calling a lambda.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, func, *args, **kwargs):
|
||||||
|
self.func = func
|
||||||
|
super(SerializerLambdaField, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def field_to_native(self, obj, field_name):
|
||||||
|
value = self.func(obj)
|
||||||
|
return self.to_native(value)
|
|
@ -1002,3 +1002,16 @@ class BooleanField(TestCase):
|
||||||
bool_field = serializers.BooleanField(required=True)
|
bool_field = serializers.BooleanField(required=True)
|
||||||
|
|
||||||
self.assertFalse(BooleanRequiredSerializer(data={}).is_valid())
|
self.assertFalse(BooleanRequiredSerializer(data={}).is_valid())
|
||||||
|
|
||||||
|
|
||||||
|
class SerializerLambdaFieldTest(TestCase):
|
||||||
|
"""
|
||||||
|
Tests for the SerializerLambdaField field_to_native() behavior
|
||||||
|
"""
|
||||||
|
class Example():
|
||||||
|
my_test = 'Hey, this is a test !'
|
||||||
|
|
||||||
|
def test_field_to_native(self):
|
||||||
|
s = serializers.SerializerLambdaField(lambda obj: obj.my_test)
|
||||||
|
result = s.field_to_native(self.Example(), None)
|
||||||
|
self.assertEqual(result, 'Hey, this is a test !')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user