我们从Python开源项目中,提取了以下6个代码示例,用于说明如何使用rest_framework.serializers.SerializerMethodField()。
def setUp(self): from .models import User depends = self._getTarget() class ForDependsTestUserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('id', 'first_name', "last_name") first_name = serializers.SerializerMethodField() last_name = serializers.SerializerMethodField() @depends("username") def get_first_name(self, ob): return ob.username.split(" ", 1)[0] @depends("username") def get_last_name(self, ob): return ob.username.split(" ", 1)[1] self.Serializer = ForDependsTestUserSerializer
def setUp(self): from .models import User contextual = self._getTarget() def has_xxx_context(xxx, replaced): def check(token, context): return replaced if xxx in context else [] return check class ForContextualTestUserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('id', 'username') username = serializers.SerializerMethodField() @contextual(has_xxx_context('with_username', 'username')) def get_username(self, ob): return ob.username.split(" ", 1)[0] self.Serializer = ForContextualTestUserSerializer
def __init__(self, *args, **kwargs): try: style_content = kwargs.pop("style_content") except: style_content = False try: ows_serializer_method = kwargs.pop('ows') except: ows_serializer_method = 'get' super(RecordSerializer, self).__init__(*args, **kwargs) self.fields['styles'] = StyleSerializer(many=True, required=False, style_content=style_content) if ows_serializer_method == 'post': self.fields['ows_resource'] = OwsResourceSerializer(write_only=True, required=False) elif ows_serializer_method == 'get': self.fields['ows_resource'] = serializers.SerializerMethodField(read_only=True)
def compat_serializer_method_field(method_name=None): """ method_name changed in DRF > 3. See http://www.django-rest-framework.org/topics/3.0-announcement/#optional-argument-to-serializermethodfield. """ if DRFVLIST[0] >= 3: return serializers.SerializerMethodField() else: return serializers.SerializerMethodField(method_name=method_name)
def setUp(self): from .models import User from .serializers import SkillSerializer contextual = self._getTarget() def has_nested(serializer_class, key_name, default): def _has_nested(token, context): if context.get(key_name, False): name_list = token.translator.translate(serializer_class, None, context) return ["{}__{}".format(token.queryname, name) for name in name_list] else: return default return _has_nested class ForContextualTestUserSerializer(serializers.ModelSerializer): skills = serializers.SerializerMethodField() class Meta: model = User fields = ('id', 'username', 'skills') @contextual(has_nested(SkillSerializer, 'with_skills', default=[])) def get_skills(self, ob): if self.context.get("with_skills", False): return SkillSerializer(ob.skills, many=True).data else: return [] self.Serializer = ForContextualTestUserSerializer
def __init__(self, *args, **kwargs): try: style_content = kwargs.pop("style_content") except: style_content = False super(StyleSerializer, self).__init__(*args, **kwargs) if style_content: self.fields['raw_content'] = serializers.SerializerMethodField(read_only=True)