我需要能够检索相关记录的总和以用于显示目的,并且还可以通过三个相关模型的计数总和来排序。目前,我通过使用" extra"来解决这个问题。子句:
results = Poll.visible.extra(
select={
'f_count':
"""
SELECT COUNT('id') FROM polls_forecast
WHERE polls_forecast.poll_id = polls_poll.id
""",
'total':
"""
(SELECT COUNT('id') FROM polls_forecast
WHERE polls_forecast.poll_id = polls_poll.id) +
(SELECT COUNT('id') FROM polls_pollcomment
WHERE polls_pollcomment.poll_id = polls_poll.id) +
(SELECT COUNT('id') FROM polls_favoritedpoll
WHERE polls_favoritedpoll.poll_id = polls_poll.id)
"""
}
).order_by('-total')[:100]
是否可以对f_count
进行别名,因此我不必在total
选择语句中执行相同的计数?在f_count
选择中引用total
会引发"列不存在"错误。
我使用的是Postgres 9.4,Django 1.7.5,Python 3.4。
答案 0 :(得分:1)
不使用.extra
。您需要使用raw
。以下是docs。
如果您决定采用该路线,则必须在该原始SQL查询中执行visible
中涉及的过滤器。与QuerySet相比,我对RawQuerySet提供的内容并不是100%肯定。