Запрос один ко многим с использованием зефира для ответа не работает

Я пытаюсь сделать запрос и ответ следующим образом:

    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)

Однако возврат, который я получаю, выглядит следующим образом:

{
    "data": {
        "avatar": "example.com",
        "email": "[email protected]",
        "id": 10
    }
}

То есть возвращается только пользовательская часть запроса, а не настройки. Кто-нибудь знает, как это решить?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для того, чтобы в результате также отображались предпочтения, необходимо также указать поле в полях для отображения.
При определении вложенных полей вы проскочили в метаспецификацию с отступом. Однако поля задаются на уровне схемы.

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": "[email protected]", 
    "id": 10, 
    "preferences": [
      {
        "preference": "anything", 
        "user_id": 10
      }, 
      {
        "preference": "something", 
        "user_id": 10
      }
    ]
  }
}

Другие вопросы по теме