Python Jsonify烧瓶sqlalchemy烧瓶中的多对一关系
我试图用flask restful制作rest API,我使用flask sqlalchemy作为ORMPython Jsonify烧瓶sqlalchemy烧瓶中的多对一关系,python,json,flask,flask-sqlalchemy,flask-restful,Python,Json,Flask,Flask Sqlalchemy,Flask Restful,我试图用flask restful制作rest API,我使用flask sqlalchemy作为ORM class Post(db.Model): __tablename__ = 'post' postid = db.Column(db.Integer,primary_key=True) post = db.Column(db.String(64)) userid = db.Column(db.Integer,db.ForeignKey('user.userid')) #serialize
class Post(db.Model):
__tablename__ = 'post'
postid = db.Column(db.Integer,primary_key=True)
post = db.Column(db.String(64))
userid = db.Column(db.Integer,db.ForeignKey('user.userid'))
#serialize property used for serializing this class to JSON
@property
def serialize(self):
return {
'postid': self.postid,
'post': self.post,
'author':self.author
}
及
现在我正试图用这个来制作json
class PostList(Resource):
def get(self):
posts = DL_models.Post.query.all()
posts = [post.serialize for post in posts]
return { 'posts': posts }
api.add_resource(PostList, '/twitter/api/v1.0/posts', endpoint = 'posts')
当我将Post中的序列化方法更改为
@property
def serialize(self):
return {
'postid': self.postid,
'post': self.post,
'author':self.postid
}
这将返回预期的json输出,但当我更改为“author”:self.author时,我收到一个错误
TypeError: <app.DL_models.User object at 0x7f263f3adc10> is not JSON serializable
TypeError:不可序列化JSON
我知道我也必须对这些嵌套对象调用serialize,但我不知道如何做
或者请分享您在sqlalchemy中编码关系的经验。这是一个赌注,但您是否尝试过以下方法 “作者”:self.author.username
从错误消息中,我猜它正在传递给用户,但不知道您想从中得到什么。既然您已经在使用Flask Restful,您是否考虑过使用其内置功能
但是,对于封送复杂的数据结构,我发现这样做的效果要好上千倍,甚至可以简化其他序列化程序中的嵌套。还有一个Flask扩展,用于检查端点和输出URL。我已经尝试过了,它会起作用。但这只会给出那个用户名。我想要的是一个嵌套结构,其中作者应该拥有关于该用户的所有详细信息。谢谢你的回复!!谢谢!!你救了我一天。不知何故,我错过了Flask restful的内置数据封送解决方案,它可以按预期工作。另一个替代方案,在本文中使用BaseModel类详细介绍:
TypeError: <app.DL_models.User object at 0x7f263f3adc10> is not JSON serializable