marshmallow.fields.Nested() 函数中的属性到底是啥?
Posted
技术标签:
【中文标题】marshmallow.fields.Nested() 函数中的属性到底是啥?【英文标题】:What exactly is the attribute in marshmallow.fields.Nested() function?marshmallow.fields.Nested() 函数中的属性到底是什么? 【发布时间】:2020-07-17 22:42:58 【问题描述】:我正在尝试将 Schema 嵌套在另一个 Schema 中,如下所示:
class RecipePaginationSchema(PaginationSchema):
data = fields.Nested(RecipeSchema, attribute = "items", many = True)
结果应该是这样的:
"links":
"first": "http://localhost:5000/users/name/recipes?per_page=2&visibility=all&page=1",
"last": "http://localhost:5000/users/name/recipes?per_page=2&visibility=all&page=2",
"next": "http://localhost:5000/users/name/recipes?per_page=2&visibility=all&page=2"
,
"page": 1,
"pages": 2,
"per_page": 2,
"total": 3,
"data": [
"id": 11,
...
但是,当我尝试使用另一个属性而不是“项目”时,我没有得到 JSON 响应中的“数据”部分。那么,这个属性到底指的是什么?
顺便说一句,我正在关注 Packt 的 Python API 开发基础一书。
【问题讨论】:
您提出了一个明确的问题并发布了一个格式化的问题。 +1 【参考方案1】:来自documentation:
attribute – 序列化时获取值的属性名称。如果没有,则假定属性与字段具有相同的名称。注意:这应该只用于非常特定的用例,例如为单个属性输出多个字段。在大多数情况下,您应该改用 data_key。
换句话说,您将RecipePaginationSchema 中的字段“数据”映射到RecipeSchema 中的属性“items”。
我不知道您的用例,但如文档中所述,您应该使用属性关键字作为最后的手段。许多用例可以使用“only”和“exclude”关键字来解决(参见here)。
【讨论】:
不完全是。这意味着用RecipeShema序列化的结构应该在整个数据结构中的“items”属性而不是“data”属性中进行序列化。实际上,如果您将字段命名为“items”并改用“data_key=data”,则可以避免使用属性。 如果您将此作为答案发布,我会投赞成票。这个解释比我自己的要好得多。以上是关于marshmallow.fields.Nested() 函数中的属性到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章