问题描述
创建与我的模型相同的棉花糖架构的日子已经一去不复返了。我发现this excellent answer解释了如何使用简单的装饰器自动从SQA模型自动生成模式,因此我实现了它,并用不推荐使用的ModelSchema
替换了较新的sqlAlchemyAutoSchema
:
def add_schema(cls):
class Schema(sqlAlchemyAutoSchema):
class Meta:
model = cls
cls.Schema = Schema
return cls
这很好用...直到我碰上血腥的Enum
模型。
错误:Object of type MyEnum is not JSON serializable
我在线搜索,发现this useful answer。
但是我想将其实现为装饰器的一部分,以便它也可以自动生成。换句话说,在使用EnumField(TheEnum,by_value=True)
装饰器生成模式时,我想用add_schema
自动覆盖模型中的所有枚举;这样,我就不必手动覆盖所有字段。
什么是最好的方法?
解决方法
这是我的解决方案:
EnumField
想法是遍历Schema中的字段并找到具有验证的字段(通常是枚举)。从那里我们可以提取一个选择列表,然后可以用来从头开始构建一个枚举。最后,我们用新的kmlButton = $('.load-kml'),kmlButton3g = $('.load-kml-3g'),kmlButton4g = $('.load-kml-4g');
kmlButton.click(function (e) {
ymaps.geoXml.load('geoObjects.kml')
.then(onGeoXmlLoad);
});
kmlButton3g.click(function (e) {
ymaps.geoXml.load('3gobject.kml')
.then(onGeoXmlLoad);
});
kmlButton4g.click(function (e) {
ymaps.geoXml.load('4gobject.kml')
.then(onGeoXmlLoad);
});
function onGeoXmlLoad(res) {
if (res.geoObjects.load) {
myMap.geoObjects.remove(res.geoObjects);
} else {
myMap.geoObjects.add(res.geoObjects);
}
}
}
覆盖架构字段。
无论如何,请随时改善答案!