使用Python 3.6
在Django Rest框架中:
@six.add_metaclass(SerializerMetaclass)
class Serializer(BaseSerializer):
...
class ModelSerializer(Serializer):
我想扩展SerializerMetaclass
:
class JSONDataMetaclass(SerializerMetaclass):
"""Meta class to dynamically add SerializerMethodField and look up JSON data"""
def __new__(cls, name, bases, attrs):
for field in getattr(attrs.get('Meta'), 'json_fields', []):
def closure(field):
def _(self, obj):
if len(field) == 1:
return obj.raw_data.get(field[0])
return obj.raw_data.get(field[1])
return _
attrs[field[0]] = serializers.SerializerMethodField()
attrs['get_{}'.format(field[0])] = closure(field)
return super(JSONDataMetaclass, cls).__new__(cls, name, bases, attrs)
以便我的序列化程序可以使用我的元类
在我的客户序列化程序中:
@six.add_metaclass(JSONDataMetaclass)
class MySerializer(ModelSerializer):
...
但是,这导致了一些奇怪的行为,例如。它不遵守定义的depth
并一直将其序列化为嵌套关系。
我在做什么错了?