Я пытаюсь добиться некоторого дополнительного выбора в запросе и хочу добавить нужную таблицу в пул таблиц в запросе с помощью метода 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, когда видит, что я не использую таблицу testa (из-за «значений», заявление). Таким образом, в результате 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")
, но я должен положить заявление значения, как я хочу, чтобы агрегаты, как и в «кол объекты б сгруппированных в час дня в объекте»:
testB.objects.all().select_related('a').extra(select = {'hour' : 'extract(hour from testa.date)'}).values('hour').annotate(count = Count('pk'))
Так что это хороший способ для того чтобы достигнуть этого? «Считать объекты, сгруппированные чем-то в другом объекте»? Или есть способ «заставить» джанго сохранить таблицы «select_related», даже если он считает их бесполезными?
PS: Я знаю, что я мог бы использовать «таблицы» аргумент дополнительного заявления, но в этом случае я бы переписать присоединиться сам, и я хочу, чтобы извлечь выгоду из Джанго ОРМ
Если это было сделано для визуализации данных, это именно то, что я ищу. Инструмент, который я пытаюсь создать, - это инструмент, позволяющий пользователям запрашивать базу данных путем «написания» предложений следующим образом: «Я хочу подсчитать ObjectA с ObjectB.date> 20100101 и иметь ObjectC.code = 'foo' groupe по ObjectA.code и ObjectC.category " Пользовательский интерфейс является ajax, и когда пользователь выбирает первую« модель »для запроса, фильтры и группы по выбору заполняются возможными значениями. На данный момент я пытаюсь с SQLAlchemy, но я посмотрю на django-cube Спасибо –