marshmallow-sqlalchemy Невозможно получить данные дочерней модели из родительской model_schema - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь использовать marshmallow-sqlalchemy для создания API

Однако при выводе данных отображаются только данные родительских моделей

like {'id': 1,'date': '2019-09-01'}

Как получить данные компании, такие как {'id': 1, 'date': '2019-09-01', 'orders': {'id ': 1,' date ':' 2019-09-01 '}, {' id ': 1,' date ':' 2019-09-01 '}}

модель

class Order(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    company_id = db.Column(db.Integer, db.ForeignKey('user_company.id'), nullable=False)
    company = db.relationship('UserCompany', backref='orders', lazy=True)
    date = db.Column(db.DateTime(), server_default=func.now())

class UserCompany(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    company_name = db.Column(db.String(length=20))

И схема

class OrderSchema(ModelSchema):
    class Meta:
        sqla_session = db.Session
        fields = ('id', 'date')
        model = Order


order_schema = OrderSchema()
orders_schema = OrderSchema(many=True)


class UserCompanySchema(ModelSchema):
    orders = Nested(OrderSchema, many=True)
    class Meta:
        fields = ('id', 'company_name')
        model = UserCompany
        sqla_session = db.session


user_company_schema = UserCompanySchema()

, а представление

company = UserCompany.query.get(current_user.company.id)
print(user_company_schema.dump(company))

{'id': 1, 'date': '2019-09-01'}

То, что я хочу, это

{'id': 1, 'date': '2019-09-01', 'orders': {'id': 1, 'date': '2019-09-01'}, {'id': 1, 'date': '2019-09-01'}}

1 Ответ

1 голос
/ 25 сентября 2019

Вам нужно явно установить все нужные поля в мета-классе, если вы хотите, чтобы они присутствовали в дампах.

class UserCompanySchema(ModelSchema):
    orders = Nested(OrderSchema, many=True)
    class Meta:
        fields = ('id', 'company_name', 'orders')
        model = UserCompany
        sqla_session = db.session
...