gpt4 book ai didi

python - 过滤 Flask Marshmallow 中的嵌套字段

转载 作者:行者123 更新时间:2023-12-02 02:28:14 25 4
gpt4 key购买 nike

我想在 Marshmallow 3 中将 is_active 列的嵌套字段过滤为 True考虑以下场景我有3张 table

users (id, name)
organizations (id, name)
organization_user(id, organization_id, user_id, is_active)

现在我正在尝试打印所有组织及其活跃成员。 (有一些活跃和不活跃的成员)

我有以下架构

class OrganizationSchema(ma.ModelSchema):
members_list = fields.Nested(OrgnizationUserSchema, many=True, exclude=('checklist', ))

class OrgnizationUserSchema(ma.ModelSchema):
user_list = fields.Nested(UserSchema)

现在在我的操作中,以下是代码

organization_schema = OrganizationSchema(many=True)
#Query for list of organization
organization_list = Organization.query.all()
organization_schema.dump(organization_list)

以下是输出

[
{
'id': 1,
'name': 'abc',
'members_list': [
{'id':1, 'organization_id': 1, 'user_id':1, 'is_active':True},
{'id':1, 'organization_id': 1, 'user_id':2, 'is_active':False}
]
}
]

我想要具有 'is_active':True 的成员的输出,如下

[
{
'id': 1,
'name': 'abc',
'members_list': [
{'id':1, 'organization_id': 1, 'user_id':1, 'is_active':True}
]
}
]

Marshmallow 提供了一个装饰器@post_dump。这里的问题是 Query 带来了所有数据,然后我们用装饰器 @post_dump 对其进行过滤。但流程应该是这样的,在查询时应该有某种方法来过滤数据,而不是查询后过滤。

最佳答案

我走了另一条路。我有布料、设计和剩余物。对于每种 Fabric ,我需要获取所有设计,并且对于每种设计将获取指定城市的剩余部分。

class ClothSchema(Schema):
id = fields.Integer(dump_only=True)
name = fields.String(validate=not_blank)
type = fields.Nested(ClothTypeSchema)
designs = fields.Nested(DesignSchema, many=True)

class DesignSchema(Schema):
id = fields.Integer(dump_only=True)
name = fields.String(validate=not_blank)
remainders = fields.Nested(RemainderSchema, many=True)

class RemainderSchema(Schema):
id = fields.Integer(dump_only=True)
value = fields.String()
city = fields.String()

我在 Controller 中获取所需的数据,这样就不会在旅途中请求它们。

    db.session.query(Cloth)
.join(Cloth.designs)
.join(Design.remainders)
.filter(Remainder.city == city)
.options(contains_eager("designs").contains_eager("remainders"))

结果,我得到了剩余的所有布料和所有设计。如果没有指示设计余数,则不会显示。

{
"attributes": {
"designs": {
"data": [
{
"attributes": {
"name": "Amely 10 ",
"remainders": {
"data": [
{
"attributes": {
"city": "CityEnum.MOSCOW",
"value": "333"
},
"id": 9318,
"type": "remainder"
}
]
}
},
"id": 365,
"type": "design"
}
],
"links": {
"self": "/designs"
}
},
"name": "Amely",
"rapport": null,
"type": {}
},
"id": 22,
"type": "cloth"
}

关于python - 过滤 Flask Marshmallow 中的嵌套字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57851811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com