我怎样才能创建一个动态的棉花糖字段(也就是以编程方式更改用于序列化的字段)?

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 用户可以同时需要一本书和一本书及其作者的地方。

实际情况要复杂得多,用户应该能够要求一本书 + 许多其他字段,因此创建多个模式并不是一个真正的选择。

如何创建一个灵活的模型,并且可以在其中以编程方式添加字段(在本例中为嵌套字段)?

实例化序列化程序时,您可以使用 onlyinclude.

准确指定特定情况下需要哪些字段

例如,如果您只想序列化一本书的 ID 和书名,您可以这样做:

schema = BookSchema(only=('id', 'title'))

或使用exclude:

schema = BookSchema(exclude=('authors',))

文档:https://marshmallow.readthedocs.io/en/latest/api_reference.html#schema