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
python类SerializerMethodField()的实例源码
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)