Использование Python 3.6
В Django Rest framework:
@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
и сериализуется вплоть до вложенных отношений.Что я делаю не так?