これは私がそれをした方法です:
clone = kwargs.get('clone')
if clone:
pre_query = str(clone.query)
pre_query = pre_query.replace('`','"')
else:
qs = clone.get_query_set()
pre_query = str(qs.query)
pre_query = pre_query.replace('`','"')
sql = "\
with etext as ({pre_query}),\
words as ( \
select lower(regexp_split_to_table(element_text , E'\\\\W+')) as word \
from etext \
), \
word_lex as ( select word, count(*) as cnt,\
to_tsvector('english', COALESCE(word,'')) as t \
from words \
group by 1 order by %s desc ) \
select * from word_lex WHERE \
t != '' ".format(pre_query=pre_query)
limit = kwargs.get('limit')
order_by = kwargs.get('order_by')
if limit != None:
sql += 'limit {limit}'.format(limit=limit)
if order_by != None:
sql = sql %(order_by)
else:
sql = sql %('cnt')
return custom_sql(sql)
基本的に、私はdjangoによって生成されたSQL全体を使用して、サブクエリを使用して別のSQLを作成しました。そこから、それを後続のクエリで使用しました。