如何在RawSQL中修改当前对象(F对象)

我的订单模型如下所示:

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()

对于每个实例,我真的不想循环实际实例并重建.我必须在这里错过一些简单的解决方案.

在此先感谢您的帮助.

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

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