【问题标题】:How can I get other fields from relation model?如何从关系模型中获取其他字段?
【发布时间】:2020-02-12 13:33:49
【问题描述】:

我正在使用flask-marshmallow

作为回应,我得到下一个类似的json

data = {
    'id': '1.0.1',
    'name': 'test',
    'applicaion_id': 'google',
}

如何从Application 获得application.name

反应

class VersionDetail extends Component {
  state = {
    app: {
      id: '',
      name: '',
      application_id: '',    
    }
  }

  componentDidMount() {
    axios.get('/apps/'+this.props.match.params.id)
    .then(response => this.setState({ app: response.data }))
    .catch(function (error) {
    })
  }

  render() {
    return ()
  }
}

路线

class ApplicationDetailSchema(ma.ModelSchema):
  class Meta:
    model = Application
    fields = ('id', 'name', 'versions')


class VersionDetailSchema(ma.ModelSchema):
  class Meta:
    model = Version
    fields = ('id', 'file', 'application_id')


version_schema = VersionDetailSchema()


@app.route("/<application_id>/<version_id>")
def version_detail(id):
    application = Application.get(application_id)
    version = Version.get(version_id)
    return version_schema.dump(version)

模型

class Application(db.Model):
  __tablename__ = 'applications'

  id = db.Column(db.String(), primary_key=True)
  name = db.Column(db.String())
  versions = db.relationship('Version', backref='application', lazy=True)

  def __repr__(self):
    return '<application {}>'.format(self.name)

class Version(db.Model):
  __tablename__ = 'versions'

  id = db.Column(db.String(), primary_key=True)
  file = db.Column(db.String(80), nullable=True)
  application_id = db.Column(db.Integer, db.ForeignKey('applications.id'))

  def __repr__(self):
    return '<version {}>'.format(self.id)

【问题讨论】:

    标签: reactjs flask flask-restful


    【解决方案1】:

    我认为您需要将ma.Nested 架构添加到您的VersionDetailSchema 中,如this answer 中所述 - 类似;

    class VersionDetailSchema(ma.ModelSchema):
    
      application = ma.Nested(ApplicationDetailsSchema, only=['name'])
    
      class Meta:
        model = Version
        fields = ('id', 'file', 'application_id', 'application')
    

    我只是根据marshmallow docs 猜测only=['name']

    不幸的是,flask-marshmallow 没有太多关于此的文档 - 我个人发现使用该插件的好处实际上比文档更完整的 marshmallow 本身要少 - 设置几乎不是很困难.

    【讨论】:

    • 谢谢。我改变了你的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多