Flask, зефир - проблема с вложенным полем - PullRequest
1 голос
/ 09 февраля 2020

У меня есть 2 таблицы с отношением «один к одному».

Когда я получаю данные из одной таблицы, я хочу включить одно поле из связанной таблицы, но без «точечной нотации».

Что работает:

class UserEntitySchema(db_schema.Schema):
    class Meta:
        fields = ('id', 'username', 'email', 'confirmed', 'created', 'enabled', 'account.status')

Я хочу, чтобы "account.status" был просто "статусом", но я не могу понять, как его получить.

Я попробовал Pluck, как предложил @marke, но безрезультатно. Здесь что-то не так?

class AccountEntitySchema(db_schema.Schema):
    current_status = fields.Str()
    class Meta:
        fields =('current_status',)

class UserEntitySchema(db_schema.Schema):
    status = fields.Pluck(AccountSchema, 'current_status')
    class Meta:
        fields = ('id', 'username', 'email', 'status')

Мое обновленное, рабочее решение (спасибо @marke!):

class AccountEntitySchema(db_schema.Schema):
    class Meta:
        fields =('current_status',)

class UserEntitySchema(db_schema.Schema):
    account = fields.Pluck(AccountSchema, 'current_status', data_key='status') #<==== data_key will replace the existing field
    class Meta:
        # Fields to expose
        fields = ('id', 'username', 'email', 'account')

1 Ответ

1 голос
/ 10 февраля 2020

Как уже упоминалось в комментариях, можно использовать поле «pluck»: https://marshmallow.readthedocs.io/en/stable/api_reference.html#marshmallow .fields.Pluck

...