【发布时间】:2016-11-07 12:12:49
【问题描述】:
我将 mongoengine 与 django rest 框架一起使用。我的模型:
import mongoengine as mongo
class Plan(mongo.Document):
slug = mongo.StringField(max_length=255, primary_key=True)
subplans = mongo.ListField(mongo.EmbeddedDocumentField('self'))
我需要如下所示的序列化程序:
class PlanSerializer(serializers.DocumentSerializer):
subplans = PlanSerializer(many=True, required=False)
class Meta:
model = Plan
但这对 Python 来说是不正确的。所以我使用元类来动态添加subplans 字段:
class AddSubplanAttrMetaclass(type):
def __new__(cls, name, bases, dct):
# this code is incorrect because PlanSerializer not in globals
class_obj = globals()[name]
dct['subplans'] = class_obj(many=True, required=False)
return super(AddSubplanAttrMetaclass, cls).__new__(cls, name, bases, dct)
class PlanSerializer(serializers.DocumentSerializer, metaclass=AddSubplanAttrMetaclass):
class Meta:
model = Plan
如何将PlanSerializer 类设置为元类__new__ 方法内的属性?
【问题讨论】:
标签: python django-rest-framework mongoengine metaclass