Я использую mongoengine с картой отдыха django. Моя модель:Добавить динамическое свойство с классом в метаклассе Python
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__
метода метакласса?