【问题标题】:How to refence current object (F object) within RawSQL如何在原始 SQL 中引用当前对象(OF 对象)
【发布时间】:2016-08-05 18:05:53
【问题描述】:

我的Order 模型如下所示:

class Order(models.Model):
    ...
    billing_email = models.EmailField()
    ...

我正在寻找的期望输出是 ValuesQuerySet,它将包含一些字段值和具有相同 billing_email 的订单数量的计算值。

我试图用F 对象引用billing_email,但执行以下操作导致错误:

In [68]: orders = Order.objects.annotate(
    total_orders=RawSQL(
        "SELECT COUNT(*) FROM appname_order WHERE billing_email = %s",
        (F('billing_email'),)  # current instance's billing_email
    ),
)

In [69]: orders
Out [70]: ProgrammingError: can't adapt type 'F'

我需要评估并作为每个实例的额外字段输出的值几乎是:

Order.objects.filter(billing_email__iexact=<current_billing_email>).count()

对于每个实例,我真的不想遍历实际实例并重建。我一定在这里遗漏了一些简单的解决方案。

提前感谢您的帮助。

【问题讨论】:

  • 我认为 usign F() 允许您获取列或字段的值,而无需从数据库中提取它。请参阅class F docs
  • 谢谢,但对我的问题没有帮助。问题是我需要在旅途中引用this(当前)行的值(billing_email)来构造额外的输出

标签: python django postgresql


【解决方案1】:

您可以使用模型的表名引用“当前”行:

RawSQL( "SELECT COUNT(*) FROM appname_order order WHERE order.billing_email =appname_order.billing_email",[])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2017-09-11
    • 2012-11-07
    • 1970-01-01
    相关资源
    最近更新 更多