【发布时间】:2020-01-21 14:24:24
【问题描述】:
我遇到了这个问题,我使用 ModelSchema 来验证我的 API 输入,这给了我一个数据库模型,它工作正常,但是如果我使用映射类继承(单表类型),ModelSchema 只给我没有父级子属性。
class SerialInterface(sql.Model):
type = sql.Column(sql.String(50))
polymorphic_identity = {
'polymorphic_identity': 'serial_interface',
'polymorphic_on': type,
}
id = sql.Column(types.Integer, primary_key=True)
transmission_rate = sql.Column(types.Integer)
mad_id = sql.Column(types.Integer, sql.ForeignKey('mad.id'))
serial_protocol = sql.relationship(SerialProtocol, uselist=False, cascade="all, delete-orphan")
class RS485(SerialInterface):
parity = sql.Column(EnumSmart(Parity))
data_bits = sql.Column(types.Integer)
stop_bits = sql.Column(types.Integer)
polymorphic_identity = SerialTypes.RS485.name
class SerialInterfaceForm(BaseSchema):
class Meta(BaseSchema.Meta):
model = SerialInterface
transmission_rate = Integer(required=True)
mad_id = Integer(required=True)
serial_protocol = Nested(SerialProtocolForm, required=True)
parity = EnumField(Parity, required=True)
data_bits = Integer(required=True)
stop_bits = Integer(required=True)
当我使用 SerialInterfaceForm().load(input_json) 它返回 <SerialInterface (transient 1477443543280)> ,使用 __dict__: {'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x00000157FE7F6550>, 'type': 'RS485', 'transmission_rate': 9600, 'mad_id': 1, 'serial_protocol': <SerialProtocol (transient 1477443544120)>}
我的疑问是如何让 Marshmallow ModelSchema 返回正确的孩子及其属性
【问题讨论】:
标签: python flask sqlalchemy flask-sqlalchemy flask-marshmallow