我怎样才能创建一个动态的棉花糖字段(也就是以编程方式更改用于序列化的字段)?
how can I create a dynamic marshmallow field (aka change the fields used for serialization programmatically)?
假设我有两个模型和两个序列化程序:
class AuthorSchema(ma.ModelSchema):
class Meta:
model = Author
fields = ('id', 'name')
class BookSchema(ma.ModelSchema):
class Meta:
model = Book
authors = fields.Nested(AuthorSchema, many=True)
fields = ('id', 'title', 'authors')
我正在尝试创建一些 API 用户可以同时需要一本书和一本书及其作者的地方。
实际情况要复杂得多,用户应该能够要求一本书 + 许多其他字段,因此创建多个模式并不是一个真正的选择。
如何创建一个灵活的模型,并且可以在其中以编程方式添加字段(在本例中为嵌套字段)?
实例化序列化程序时,您可以使用 only
或 include
.
准确指定特定情况下需要哪些字段
例如,如果您只想序列化一本书的 ID 和书名,您可以这样做:
schema = BookSchema(only=('id', 'title'))
或使用exclude
:
schema = BookSchema(exclude=('authors',))
文档:https://marshmallow.readthedocs.io/en/latest/api_reference.html#schema
假设我有两个模型和两个序列化程序:
class AuthorSchema(ma.ModelSchema):
class Meta:
model = Author
fields = ('id', 'name')
class BookSchema(ma.ModelSchema):
class Meta:
model = Book
authors = fields.Nested(AuthorSchema, many=True)
fields = ('id', 'title', 'authors')
我正在尝试创建一些 API 用户可以同时需要一本书和一本书及其作者的地方。
实际情况要复杂得多,用户应该能够要求一本书 + 许多其他字段,因此创建多个模式并不是一个真正的选择。
如何创建一个灵活的模型,并且可以在其中以编程方式添加字段(在本例中为嵌套字段)?
实例化序列化程序时,您可以使用 only
或 include
.
例如,如果您只想序列化一本书的 ID 和书名,您可以这样做:
schema = BookSchema(only=('id', 'title'))
或使用exclude
:
schema = BookSchema(exclude=('authors',))
文档:https://marshmallow.readthedocs.io/en/latest/api_reference.html#schema