【问题标题】:marshmallow-sqlalchemy Unable to get child model's data from parent model_schemamarshmallow-sqlalchemy 无法从父 model_schema 获取子模型的数据
【发布时间】:2020-01-25 11:16:54
【问题描述】:

我正在尝试使用 marshmallow-sqlalchemy 创建 API

但是,当我转储数据时,它只显示父模型数据

like {'id': 1, 'date': '2019-09-01'}

如何获取公司数据,例如 {'id': 1, 'date': '2019-09-01', 'orders': {'id': 1, 'date': '2019-09-01' '}, {'id': 1, '日期': '2019-09-01'}}

型号是

class Order(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    company_id = db.Column(db.Integer, db.ForeignKey('user_company.id'), nullable=False)
    company = db.relationship('UserCompany', backref='orders', lazy=True)
    date = db.Column(db.DateTime(), server_default=func.now())

class UserCompany(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    company_name = db.Column(db.String(length=20))

架构是

class OrderSchema(ModelSchema):
    class Meta:
        sqla_session = db.Session
        fields = ('id', 'date')
        model = Order


order_schema = OrderSchema()
orders_schema = OrderSchema(many=True)


class UserCompanySchema(ModelSchema):
    orders = Nested(OrderSchema, many=True)
    class Meta:
        fields = ('id', 'company_name')
        model = UserCompany
        sqla_session = db.session


user_company_schema = UserCompanySchema()

视图是

company = UserCompany.query.get(current_user.company.id)
print(user_company_schema.dump(company))

{'id': 1, 'date': '2019-09-01'}

我想要的是

{'id': 1, 'date': '2019-09-01', 'orders': {'id': 1, 'date': '2019-09-01'}, {'id': 1, 'date': '2019-09-01'}}

【问题讨论】:

  • 看起来 user_company_schema 实际上是 OrderSchema 的实例,并传递了订单实例。您确定粘贴的所有代码都是您的意思吗?
  • @stasiekz 对不起,这是一个错误。我刚刚更新了 UserCompanySchema 和 OrderSchema
  • 使用class Meta(ModelSchema.Meta):

标签: flask sqlalchemy marshmallow


【解决方案1】:

如果您希望它们出现在转储中,则需要在 Meta 类中显式设置所有所需字段。

class UserCompanySchema(ModelSchema):
    orders = Nested(OrderSchema, many=True)
    class Meta:
        fields = ('id', 'company_name', 'orders')
        model = UserCompany
        sqla_session = db.session

【讨论】:

  • 这救了我的命!!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多