diff --git a/adrf/fields.py b/adrf/fields.py index d242705..2893ff9 100644 --- a/adrf/fields.py +++ b/adrf/fields.py @@ -1,5 +1,6 @@ from rest_framework.serializers import SerializerMethodField as DRFSerializerMethodField + class SerializerMethodField(DRFSerializerMethodField): async def ato_representation(self, attribute): method = getattr(self.parent, self.method_name) diff --git a/tests/test_serializers.py b/tests/test_serializers.py index 266573f..2f0ffc3 100644 --- a/tests/test_serializers.py +++ b/tests/test_serializers.py @@ -5,6 +5,7 @@ from rest_framework import serializers from rest_framework.test import APIRequestFactory +from adrf.fields import SerializerMethodField from adrf.serializers import ModelSerializer, Serializer from .models import Order, User @@ -254,3 +255,39 @@ async def test_order_serializer_valid(self): assert await sync_to_async(serializer.is_valid)() assert await serializer.adata == data assert serializer.errors == {} + + +class TestSerializerWithSerializerMethodField(TestCase): + def test_sync_serializer_valid(self): + class SimpleSerializer(Serializer): + username = serializers.CharField() + age = SerializerMethodField() + + def get_age(self, obj): + return 1900 + + data = { + "username": "test", + } + data_with_age = {"age": 1900, **data} + serializer = SimpleSerializer(data=data) + assert serializer.is_valid() + assert serializer.data == data_with_age + assert serializer.errors == {} + + async def test_async_serializer_valid(self): + class SimpleAsyncSerializer(Serializer): + username = serializers.CharField() + age = SerializerMethodField() + + async def get_age(self, obj): + return 1900 + + data = { + "username": "test", + } + data_with_age = {"age": 1900, **data} + serializer = SimpleAsyncSerializer(data=data) + assert serializer.is_valid() + assert await serializer.adata == data_with_age + assert serializer.errors == {}