Как отобразить один массив объектов свойств в плоский массив в приложении sqlalchemy marshmallow? - PullRequest
0 голосов
/ 25 февраля 2019

Я пишу Python Flask WebApp впервые.Использование Flask, SQLAlchemy, Marshmallow в качестве моих основных пакетов.У меня есть вложенная схема, но на родительской странице я не отображаю дочерние элементы, но я хочу перенести все дочерние идентификаторы в родительский, чтобы на странице сведений я мог загрузить все дочерние элементы.Я обрезал дочерние элементы, чтобы они возвращали только идентификаторы, но тогда я не хочу, чтобы они были объектами с одним свойством, а вместо этого хотел использовать массив идентификаторов.

Как изменить JSON следующим образом,

{
  "description": "Report Name",
  "id": 1,
  "load_date_time": "2019-02-12T05:14:28+00:00",
  "children": [
    {
      "id": 1
    },
    {
      "id": 2
    },
    {
      "id": 3
    }
  ],
  "publish_date_time": "2018-09-03T00:00:00+00:00",
  "summary": "Summary will also be present. Usually two to three brief sentences about the content on the detail page."
}

на

{
  "description": "Report Name",
  "id": 1,
  "load_date_time": "2019-02-12T05:14:28+00:00",
  "children": [
    1,
    2,
    3
  ],
  "publish_date_time": "2018-09-03T00:00:00+00:00",
  "summary": "Summary will also be present. Usually two to three brief sentences about the content on the detail page."
}

Схемы зефира:

class ChildIdSchema(ma.Schema):
    class Meta:
        # Fields to expose
        fields = ('id', )
        ordered = True

class ParentSchema(ma.Schema):
    children = fields.Nested('ChildIdSchema', many=True)
    class Meta:
        # Fields to expose
        fields = ('id', 'description', 'children', 'summary', 'load_date_time', 'publish_date_time')
        ordered = True

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Если вы используете зефир 3, вы можете использовать для этого поле Pluck.

С зефиром 2 используйте параметр only для Nested.

# 2.x
class ParentSchema(ma.Schema):
    children = fields.Nested('ChildIdSchema', many=True, only='id')

# 3.x
class ParentSchema(ma.Schema):
    children = fields.Pluck('ChildIdSchema', 'id', many=True)
0 голосов
/ 25 февраля 2019

Вы можете сделать это, используя понимание списка следующим образом:

d['children'] = [v for child in d['children'] for k,v in child.items()]
...