с использованием полиморфизма должно помочь.
class Action(base):
id = Column(Integer, primary_key=True)
action_type = Column(Enum(SubscriptionActionType, inherit_schema=True), nullable=False)
parameters = Column(JSONB)
__mapper_args__ = {
'polymorphic_on' : action_type
}
class ActionOne(Action):
__mapper_args__ = {
'polymorphic_identity': 'action_one'
}
class ActionTwo(Action):
__mapper_args__ = {
'polymorphic_identity': 'action_two'
}
затем с использованием полей. Polymorph
mapping = {
ActionOne: action_one_serializer,
ActionTwo: action_two_serializer,
}
fields = api.model('Action', {
owner: fields.Polymorph(mapping)
})
и предоставление определений для сериализаторов с использованием api. наследовать вот так:
base_action_serializer = api.model('BaseAction', {
'id': fields.Integer(readonly=True),
'action_type': fields.String(discriminator=True)
})
action_one_serializer = api.inherit('ActionOne', parent, {
'extra_one': fields.String(attribute('parameters.extraOne'))
})
action_two_serializer = api.inherit('ActionTwo', parent, {
'extra_two': fields.String(attribute('parameters.extraTwo'))
})