如何在flask_sqlalchemy中查询嵌套数据中的数据

时间:2019-08-26 11:49:57

标签: flask flask-sqlalchemy marshmallow

我在这里使用flask_marshmallow显示我对前端的json响应,

我像波纹管一样摆着桌子

class PostImgList(db.Model):
    __tablename__ = 'boat_img_list'
    id = db.Column(db.Integer, primary_key=True)
    link = db.Column(db.Text, nullable=False)
    main = db.Column(db.Boolean, default=False)
    boat_id = db.Column(db.Integer, db.ForeignKey("boat.id"))

class Post(db.Model):
    __tablename__ = 'boat'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(200))
    seat_capacity = db.Column(db.Integer)
    img_list = db.relationship(PostImgList, backref='boat', lazy=True)

我可以通过:p获得全部数据

class PostImgListSchema(ma.ModelSchema):
    class Meta:
        model = PostImgList

class PostSchemaClass(ma.Schema):
    class Meta:
        fields = ('id', 'name', 'seat_capacity', 'img_list')
    img_list = ma.Nested(PostImgListSchema, many=True, only='link')


schema = PostSchemaClass(many=True)

data = Post.query.all()
data = schema.dump(data).data
return data

前端可以获取如下数据

"data": [
    {
      "seat_capacity": 1,
      "id": 1,
      "name": "mantapt",
      "img_list": [
        "fffadweda",
        "fffadweda",
        "fffadweda",
        "fffadweda",
        "fffadweda"
      ]
    },
    {
      "seat_capacity": 10,
      "id": 2,
      "name": "keren",
      "img_list": [
        "fffadweda"
      ]
    }
  ]

我知道它是在many=True中用PostImgListSchema设置的,我只想在一个结果中使用查询过滤器来获取该嵌套模式的一些数据,所以我必须为{设置many=False {1}}? 那么,如何编写PostImgListSchema模式?

我只是想用过滤器PostImgListSchema来显示我的PostImgList的位置,main field value,就像波纹管一样:

True

感谢:)

2 个答案:

答案 0 :(得分:1)

结合使用mainjoin或secondaryjoin(指定连接条件)和uselist = False可以解决问题(有关详细信息,请参见here)。

答案 1 :(得分:0)

解决了!!!

我只是在类模型Post中创建了一个财产

class Post(db.Model):
...
...
    @property
    def image(self):
        img = PostImgList.query.filter_by(main=True).first()
        if not img:
            return ""
        return img.link