如何从DRF扩展SerializerMetaclass并将其应用于我的序列化器?

时间:2018-09-12 02:12:48

标签: python django-rest-framework metaclass

使用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并一直将其序列化为嵌套关系。 我在做什么错了?

0 个答案:

没有答案