使用JSON可序列化枚举自动生成棉花糖架构

问题描述

创建与我的模型相同的棉花糖架构的日子已经一去不复返了。我发现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); } } }覆盖架构字段。

无论如何,请随时改善答案!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...