Python Marshmallow сериализует много данных отношений во вложенных json - PullRequest
0 голосов
/ 27 апреля 2020

Я ищу способ построить JSON таким образом, используя Marshmallow в качестве сериализатора, я использую sqlalchemy с flask в python. Я не могу найти документацию по вложению запроса 'many'.

{
   "result":[
        {
           "restaurant_id": "1",
           "name": "Restaurant 1",
           "open_hours" : {
               "monday":"08.00-20.00",
               "tuesday":"08.30-21.30",
            }
        },

       {
           "restaurant_id": "2",
           "name": "Restaurant 2",
           "open_hours" : {
               "monday":"08.00-20.00",
               "tuesday":"08.30-21.30",
            }
        } 
}

Ниже приведен мой код для Models

class Business_Info(db.Model):
    __tablename__ = 'business_info'
    restaurant_id= db.Column(db.Integer, primary_key = True)
    name        = db.Column(db.String(255))
    open_hours = db.relationship("Business_Hours", lazy=True)

class Business_Hours(db.Model):
    __tablename__ = 'business_hours'
    restaurant_id= db.Column(db.String(22), db.ForeignKey('business_info.restaurant_id'), primary_key = True)
    Monday      = db.Column(db.String(11))
    Tuesday     = db.Column(db.String(11))

Вот как я определил схема: -

class BusinessHoursSchema(Schema):
    class Meta:
        model = Business_Hours
        fields = ('business_id', 'Monday', 'Tuesday')

class BusinessSchema(Schema):
    class Meta:
        model = Business_Info
        fields = ('restaurant_id', 'name')
    open_hours = fields.Nested(BusinessHoursSchema, many=True)

business_schema_many = BusinessSchema(many=True)
business_hours_schema = BusinessHoursSchema(many=True)

Вот как я запрашиваю результат: -

all_data = Business_Info.query.paginate(2, 10)
result = business_schema_many.dump(all_data.items)

И полученный результат выглядит так: -

{
      "restaurant_id": "1",
      "name": "Restaurant 1"
}

Но если я попытался перебрать элементы и вывести open_hours в business_hours_schema, он вернул сериализованные business_hours.

for item in all_data.items:
   print(business_hours_schema.dump(item.open_hours))

Почему-то я не могу получить вложенные open_hours в результате, и мне нужна небольшая помощь с это.

...