使用棉花糖响应的一对多查询不起作用
One to many query using marshmallow for response not working
我正在尝试进行如下查询和响应:
get_data = request.get_json()
email = get_data.get('email')
result = User.query.join(User_Preference).filter(User.email==email).first()
dump_data = developer_schema.dump(result)
return jsonify({'data' : dump_data})
从下面两个表定义如下:
class User_Preference(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey(User.id))
preference = db.Column(db.String(45))
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(256))
experience = db.Column(db.Integer)
avatar = db.Column(db.String(256))
revenue = db.Column(db.Integer)
preferences = relationship("User_Preference")
这些是我正在使用的棉花糖模式:
class DeveloperPreferences(ma.Schema):
class Meta:
fields = ('user_id', 'preference')
class DeveloperSchema(ma.Schema):
class Meta:
fields = ('id', 'email', 'avatar')
#model = User
preferences = ma.Nested(DeveloperPreferences, many = True)
但是,我得到的return如下:
{
"data": {
"avatar": "example.com",
"email": "example@test.com",
"id": 10
}
}
那只是查询的用户部分 returned 而不是首选项。有人知道如何解决这个问题吗?
为了在结果中也显示偏好,还需要在要显示的字段中指定字段。
在定义嵌套字段时,您使用缩进进入了元规范。但是,这些字段是在架构级别设置的。
class DeveloperPreferenceSchema(ma.Schema):
class Meta:
fields = ('user_id', 'preference')
class DeveloperSchema(ma.Schema):
class Meta:
fields = ('id', 'email', 'avatar', 'preferences')
preferences = ma.Nested(DeveloperPreferenceSchema, many=True)
结果应该如下所示。
{
"data": {
"avatar": "example.com",
"email": "example@test.com",
"id": 10,
"preferences": [
{
"preference": "anything",
"user_id": 10
},
{
"preference": "something",
"user_id": 10
}
]
}
}
我正在尝试进行如下查询和响应:
get_data = request.get_json()
email = get_data.get('email')
result = User.query.join(User_Preference).filter(User.email==email).first()
dump_data = developer_schema.dump(result)
return jsonify({'data' : dump_data})
从下面两个表定义如下:
class User_Preference(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey(User.id))
preference = db.Column(db.String(45))
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(256))
experience = db.Column(db.Integer)
avatar = db.Column(db.String(256))
revenue = db.Column(db.Integer)
preferences = relationship("User_Preference")
这些是我正在使用的棉花糖模式:
class DeveloperPreferences(ma.Schema):
class Meta:
fields = ('user_id', 'preference')
class DeveloperSchema(ma.Schema):
class Meta:
fields = ('id', 'email', 'avatar')
#model = User
preferences = ma.Nested(DeveloperPreferences, many = True)
但是,我得到的return如下:
{
"data": {
"avatar": "example.com",
"email": "example@test.com",
"id": 10
}
}
那只是查询的用户部分 returned 而不是首选项。有人知道如何解决这个问题吗?
为了在结果中也显示偏好,还需要在要显示的字段中指定字段。
在定义嵌套字段时,您使用缩进进入了元规范。但是,这些字段是在架构级别设置的。
class DeveloperPreferenceSchema(ma.Schema):
class Meta:
fields = ('user_id', 'preference')
class DeveloperSchema(ma.Schema):
class Meta:
fields = ('id', 'email', 'avatar', 'preferences')
preferences = ma.Nested(DeveloperPreferenceSchema, many=True)
结果应该如下所示。
{
"data": {
"avatar": "example.com",
"email": "example@test.com",
"id": 10,
"preferences": [
{
"preference": "anything",
"user_id": 10
},
{
"preference": "something",
"user_id": 10
}
]
}
}