Как я могу создать динамическое поле зефира (иначе изменить программные поля, используемые для сериализации)? - PullRequest
0 голосов
/ 15 мая 2018

Допустим, у меня есть две модели и два сериализатора:

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, в котором пользователю может потребоваться как книга, так и книга + ее авторы.

Реальная ситуация намного сложнее, и пользователь должен иметь возможность требовать книгу + множество других полей, поэтому создание нескольких схем на самом деле не вариант.

Как создать модель, котораягибкий и где поля (в данном случае вложенные поля) могут быть добавлены программно?

1 Ответ

0 голосов
/ 20 мая 2018

При создании экземпляра сериализатора вы можете точно указать, какие поля необходимы для этого конкретного случая, используя only или include.

Например, если вы хотите сериализовать только идентификатор и название книги, вы можете сделать что-то вроде этого:

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

или используя exclude:

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

Документы: https://marshmallow.readthedocs.io/en/latest/api_reference.html#schema

...