2016-08-05 50 views
3
refence當前對象(F對象)

Order模式是這樣的:如何內RawSQL

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

所需的輸出,我尋找的是一個ValuesQuerySet會包含一些字段的值和金額的計算值的訂單與billing_email相同。

我試圖引用billing_emailF對象,但這樣做的結果如下到錯誤:

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

對於每個實例,我真的不想循環實際實例和重建。我必須在這裏錯過一些簡單的解決方案。

在此先感謝您的幫助。

+0

我覺得usign F()可以讓你得到一個列或字段不從DB把它的值。查看[F類文檔](https://docs.djangoproject.com/en/1.9/ref/models/expressions/#django.db.models.F)。 – JazZ

+0

謝謝,但並沒有真正幫助我的問題。問題是我需要在旅途中引用'this'(current)行的值('billing_email')來構造額外的輸出 – StriveForBest

回答

0

您可以參考使用模型的表名「當前」行:

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