如何从sqlalchemy orm制造混合属性出现在asdict中

发布于 2025-02-12 20:27:18 字数 1139 浏览 0 评论 0原文

我有一个像下面的模型,如下面

class Invoice(Base):
    invoice_no = Column(String(64), nullable=False, unique=True)
    invoice_date = Column(DateTime, nullable=False)
    due_date = Column(DateTime, nullable=False)
    cgst_rate = Column(DecimalRate, nullable=False, default=CGST_RATE)
    sgst_rate = Column(DecimalRate, nullable=False, default=SGST_RATE)

定义了列属性和混合属性,如下面的

    # column property
    total_amount = column_property(
        select(
            [func.round(func.coalesce(func.sum(InvoiceDetail.total_amount), 2))]
        ).where(InvoiceDetail.invoice_id == invoice_id)
    )
    cgst_amount = column_property((total_amount * cgst_rate))
    sgst_amount = column_property((total_amount * sgst_rate))
    @hybrid_property
    def grand_total(self):
        return self.total_amount + self.cgst_amount + self.sgst_amount

    @grand_total.expression
    def grand_total(cls):
        return func.sum(cls.total_amount,cls.cgst_amount,cls.sgst_amount)

返回sess.query对象为 invoice.asdict() .... column_properties正在正确启动,但我没有得到混合属性.....有关如何通过ASDIC()响应混合属性的任何输入。

I have a model like below

class Invoice(Base):
    invoice_no = Column(String(64), nullable=False, unique=True)
    invoice_date = Column(DateTime, nullable=False)
    due_date = Column(DateTime, nullable=False)
    cgst_rate = Column(DecimalRate, nullable=False, default=CGST_RATE)
    sgst_rate = Column(DecimalRate, nullable=False, default=SGST_RATE)

I defined column property and hybrid property as below

    # column property
    total_amount = column_property(
        select(
            [func.round(func.coalesce(func.sum(InvoiceDetail.total_amount), 2))]
        ).where(InvoiceDetail.invoice_id == invoice_id)
    )
    cgst_amount = column_property((total_amount * cgst_rate))
    sgst_amount = column_property((total_amount * sgst_rate))
    @hybrid_property
    def grand_total(self):
        return self.total_amount + self.cgst_amount + self.sgst_amount

    @grand_total.expression
    def grand_total(cls):
        return func.sum(cls.total_amount,cls.cgst_amount,cls.sgst_amount)

When I return the sess.query object as invoice.asdict()....column_properties are coming properly but i don't get hybrid property.....any inputs on how to get hybrid property in response via asdic().

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文