Skip to content

Commit 808312d

Browse files
committed
Added support for async SerializerMethodField
1 parent 8e67221 commit 808312d

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

adrf/fields.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from rest_framework.serializers import SerializerMethodField as DRFSerializerMethodField
22

3+
34
class SerializerMethodField(DRFSerializerMethodField):
45
async def ato_representation(self, attribute):
56
method = getattr(self.parent, self.method_name)

tests/test_serializers.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from rest_framework import serializers
66
from rest_framework.test import APIRequestFactory
77

8+
from adrf.fields import SerializerMethodField
89
from adrf.serializers import ModelSerializer, Serializer
910

1011
from .models import Order, User
@@ -254,3 +255,39 @@ async def test_order_serializer_valid(self):
254255
assert await sync_to_async(serializer.is_valid)()
255256
assert await serializer.adata == data
256257
assert serializer.errors == {}
258+
259+
260+
class TestSerializerWithSerializerMethodField(TestCase):
261+
def test_sync_serializer_valid(self):
262+
class SimpleSerializer(Serializer):
263+
username = serializers.CharField()
264+
age = SerializerMethodField()
265+
266+
def get_age(self, obj):
267+
return 1900
268+
269+
data = {
270+
"username": "test",
271+
}
272+
data_with_age = {"age": 1900, **data}
273+
serializer = SimpleSerializer(data=data)
274+
assert serializer.is_valid()
275+
assert serializer.data == data_with_age
276+
assert serializer.errors == {}
277+
278+
async def test_async_serializer_valid(self):
279+
class SimpleAsyncSerializer(Serializer):
280+
username = serializers.CharField()
281+
age = SerializerMethodField()
282+
283+
async def get_age(self, obj):
284+
return 1900
285+
286+
data = {
287+
"username": "test",
288+
}
289+
data_with_age = {"age": 1900, **data}
290+
serializer = SimpleAsyncSerializer(data=data)
291+
assert serializer.is_valid()
292+
assert await serializer.adata == data_with_age
293+
assert serializer.errors == {}

0 commit comments

Comments
 (0)