Назначьте псевдоним таблицы в QuerySet - PullRequest
1 голос
/ 22 декабря 2011

Как я могу назначить псевдоним главной таблице QuerySet в Django?

  queryset = Price.objects
  queryset = queryset.extra(
    where = ['p1.created = (select max(p2.created) from products_price p2 where p2.product_id = p1.product_id)']
  )

Я бы хотел установить псевдоним 'p1' в главной таблице Price, чтобы использовать его в подвыборке.

Редактировать: Обратите внимание, что для каждого продукта есть последняя цена.

1 Ответ

2 голосов
/ 22 декабря 2011

Вы можете увидеть запрос sql, который сделает следующее:

queryset = Price.objects.all()
print queryset.query

Если вам известен первый запрос sql.Вы можете сделать подзапрос лучше.

Хотя я делаю следующее:

price_max = Price.objects.all().order_by('-created')[0]
queryset = Price.objects.filter(created=price_max)

Или лучше всего: https://docs.djangoproject.com/en/1.3/topics/db/aggregation/#generating-aggregates-over-a-queryset

from django.db.models import Max
price_max = Price.objects.aggregate((Max('created'))['created__max']
queryset = Price.objects.filter(created=price_max)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...