使用棉花糖响应的一对多查询不起作用

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
      }
    ]
  }
}