#python #sqlalchemy
Вопрос:
На данный момент это мой код. У меня есть таблица с отношениями «один ко многим», которая отлично работает. Я хотел бы получить доступ к списку ключей в отношениях: я могу сделать это с помощью специального запроса, но я бы предпочел придерживаться декларативной логики и иметь такое поле, order_ids
которое «сопоставляет» заказы с их идентификаторами. Возможно ли это или мне нужно написать специальный выбор? Каков самый чистый способ достичь этого?
class Delivery(Base): __tablename__ = "delivery" ... id = sa.Column(GUID, primary_key=True, default=GUID_DEFAULT_SQLITE) orders = sa.orm.relationship("Order", lazy="subquery") order_ids = ??? class Order(Base): __tablename__ = "order" ... id = sa.Column(GUID, primary_key=True, default=GUID_DEFAULT_SQLITE) delivery_id = sa.Column(sa.ForeignKey("delivery.id"), nullable=True) delivery = sa.orm.relationship("Delivery", foreign_keys=[delivery_id], back_populates="orders")
Ответ №1:
Вы уже определили взаимосвязь от доставки до заказа с
orders = sa.orm.relationship("Order", lazy="subquery")
Вы можете использовать это для доступа к идентификаторам заказов в экземпляре доставки с помощью
order_ids = [order.id for order in delivery.orders]
Если вы действительно хотите, чтобы это выглядело как поле в объекте доставки, вы можете использовать @property
декоратор и получить к нему доступ через deliver.order_ids
:
class Delivery(Base): ... @property def order_ids(self) -gt; List[int]: return [order.id for order in self.orders]