我想實現一些在查詢集額外的選擇,並希望所需要的表添加到使用select_related方法查詢表池,以便爲「__」語法中受益。使用select_related和額外條款
這裏是一個簡單的模型的例子:
from django.db import models
# Create your models here.
class testA(models.Model):
code = models.TextField(unique = True)
date = models.DateTimeField(auto_now_add = True)
class testB(models.Model):
text = models.TextField()
a = models.ForeignKey(testA)
這裏是我想建立查詢:
SELECT (extract(hour from testa.date)) AS hour, testb.text FROM testb INNER JOIN testa ON (testb.a_id = testa.id)
因此,這裏是我如何建造起來的Python:
testB.objects.all().select_related('a').extra(select = {'hour' : 'extract(hour from testa.date)'}).values('hour','text')
不過在Django刪除他看到我沒有使用「種皮」表(因爲「價值」的時候select_related聲明)。因此產生的SQL查詢失敗:
SELECT (extract(hour from testa.date)) AS "hour", "testb"."text" FROM "testb"
如果我刪除了「價值」的聲明,它工作正常:
SELECT (extract(hour from testa.date)) AS "hour", "testb"."id", "testb"."text", "testb"."a_id", "testa"."id", "testa"."code", "testa"."date" FROM "testb" INNER JOIN "testa" ON ("testb"."a_id" = "testa"."id")
但我必須把價值觀聲明,因爲我想使聚集在「數按對象日期小時分組的b個對象「:
testB.objects.all().select_related('a').extra(select = {'hour' : 'extract(hour from testa.date)'}).values('hour').annotate(count = Count('pk'))
那麼實現這一目標的好方法是什麼? 「計算由另一個對象中的東西分組的對象」?或者是否有辦法「強制」django保留「select_related」表格,即使他認爲它們是無用的?
PS:我知道我可以使用額外的語句的「表」的說法,但在這種情況下,我將不得不重寫我的加盟,我想
如果它最初是爲了數據可視化而製作的,那正是我正在尋找的。我正在嘗試構建的工具是一個允許用戶通過「書寫」這樣的句子來查詢數據庫的工具:「我想要計算ObjectB.date> 20100101並且ObjectC.code ='foo'groupe的ObjectA通過ObjectA.code和ObjectC.category「 用戶界面是ajax,當用戶選擇要查詢的第一個」模型「時,過濾器和按選項分組填充可能的值。 現在我正在嘗試使用SQLAlchemy,但我會看看django-cube 謝謝 – 2010-07-20 07:50:04