Как сериализовать свойство класса, связанного с другим классом в python sqlalchemy - PullRequest
0 голосов
/ 05 января 2019

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

Base = declarative_base()

class Owner(Base):
    __tablename__ = "owner"

    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)
    email = Column(String(250), nullable=False)


class Store(Base):
    __tablename__ = "store"

    id = Column(Integer, primary_key=True)
    name = Column(String(80), nullable=False)
    owner_id = Column(Integer, ForeignKey('owner.id'))
    owner = relationship(Owner)

    @property
    def serialize(self):
        return {
                'id': self.id,
                'name': self.name,
                'owner_id': self.owner_id,
                'owner': self.owner
                }


class Product(Base):
    __tablename__ = "product"

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    description = Column(String)
    img_url = Column(String)
    price = Column(Integer)
    store_id = Column(Integer, ForeignKey('store.id'))
    store = relationship(Store)
    owner_id = Column(Integer, ForeignKey('owner.id'))
    owner = relationship(Owner)

    @property
    def serialize(self):
        return {
                'id': self.id,
                'name': self.name,
                'description': self.description,
                'img_url': self.img_url,
                'price': self.price,
                'store_id': self.store_id,
                'store': self.store,
                'owner_id': self.owner_id,
                'owner': self.owner
                }

Синтаксис, который я использую внутри приложения фляги:

@app.route('/market/stores/JSON')
def json_stores():
    """Return JSON of all the stores in the market."""
    stores = session.query(Store).all()
    return jsonify(stores=[i.serialize for i in stores])

@app.route('/catalog/store/<int:store_id>/JSON')
def json_item_in(store_id):
    """Return JSON of all the products in the store."""

    products = session.query(Item).filter_by(store_id=store_id).all()
    return jsonify(products=[i.serialize for i in products])

Например, из класса, если я удалю:

'owner': self.owner

и: 'store': self.store,

Результат возвращается без каких-либо ошибок, страница возвращает JSON для содержимого в той же структуре, которую я определил в Class.

Я не могу определить правильный синтаксис для этого, я пытался напрямую ссылаться на имя класса:

'owner': Owner.name

не работает.

Я просто хочу, чтобы на странице JSON отображалось имя владельца продукта, используя тот же метод (я знаю, что есть и другие способы вернуть JSON для содержимого).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...