Я попытался прочитать существующие вопросы о сериализации с помощью flask-Marshmallow
, но я не могу понять, что я что, я хотел бы знать, чего не хватает:
Я хочу получить такой ответ :
{
"data": [ {"name": "Netherlands tour",
"description": "This is a fascinating tour to take ...",
"price": 30.0,
"available_dates":[
{
"date": "2018-05-05"
},
{
"date": "2018-07-07"
}
],
"destinations":[
{
"location":"A",
"tour_type":"Adventure",
"danger_type":"Low"
},
{
"location":"B",
"tour_type":"Leisure",
"danger_type":"Medium"
}
],
"capacity": 30},
...
]
}
Но я не понимаю, я просто получаю это:
{
"data": [
{
"capacity": 30,
"description": "This is a fascinating tour to take",
"name": "Europe tour",
"price": 30.0
},
{
"capacity": 30,
"description": "This is a fascinating tour to take",
"name": "Europe tour",
"price": 30.0
},
{
"capacity": 30,
"description": "This is a fascinating tour to take",
"name": "Europe tour",
"price": 30.0
},
{
"capacity": 30,
"description": "This is a fascinating tour to take",
"name": "Europe tour",
"price": 30.0
}
]
Ниже моя модель:
class TourPackages(db.Model):
__tablename__ = 'tourpackage'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
description = db.Column(db.TEXT)
price = db.Column(db.Float)
destinations = db.relationship('Destinations', backref='destination_id', lazy='dynamic')
available_dates = db.relationship('AvailableDates', backref='available_date_id', lazy='dynamic')
capacity = db.Column(db.Integer)
created_on = db.Column(db.DateTime(), default=datetime.utcnow)
class Destinations(db.Model):
__tablename__ = 'destinations'
id = db.Column(db.Integer, primary_key=True)
tour_Packages = db.Column(db.Integer, db.ForeignKey('tourpackage.id'))
location = db.Column(db.String(50))
tour_type = db.Column(db.String(50))
danger_type = db.Column(db.String(50))
class AvailableDates(db.Model):
__tablename__ = 'availabledates'
id = db.Column(db.Integer, primary_key=True)
date_available = db.Column(db.String(50))
tour_date = db.Column(db.Integer, db.ForeignKey('tourpackage.id'))
тогда это моя Схема зефира:
class DestinationSchema(ma.Schema):
class Meta:
model = Destinations
sqla_session = Session
fields = ('id', 'location', 'danger_type')
class AvailableDatesSchema(ma.Schema):
class Meta:
model = AvailableDates
sqla_session = Session
fields = ('id', 'date_')
class TourPackagesSchema(ma.Schema):
class Meta:
model = TourPackages
fields = ('id', 'name', 'description', 'price', 'capacity')
destiantion = fields.Nested(DestinationSchema, many=True)
available = fields.Nested(AvailableDatesSchema, many=True)
тогда в моем методе запроса GET
это мой код:
def get_all_tours(self):
tours = db.session.query(TourPackages.name, TourPackages.description, TourPackages.price,
TourPackages.capacity,
Destinations.location,
Destinations.tour_type,
Destinations.danger_type, AvailableDates.date_available).join(
Destinations).join(AvailableDates).all()
tour_schema = TourPackagesSchema(many=True)
dump_data = tour_schema.dump(tours)
output = jsonify({'data' : dump_data})
return output
Что мне не хватает для сериализации вложенного json ответа?