Я пытаюсь сделать запрос и ответ следующим образом:
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
}
}
То есть возвращается только пользовательская часть запроса, а не настройки. Кто-нибудь знает, как это решить?
Для того, чтобы в результате также отображались предпочтения, необходимо также указать поле в полях для отображения.
При определении вложенных полей вы проскочили в метаспецификацию с отступом. Однако поля задаются на уровне схемы.
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
}
]
}
}