私は次のクエリをエミュレートするために、DjangoのクエリセットのAPIを使用しようとしている:テーブルの計算要素をDjangoクエリーセットで取得するにはどうすればよいですか?
SELECT EXTRACT(year FROM chosen_date) AS year,
EXTRACT(month FROM chosen_date) AS month,
date_paid IS NOT NULL as is_paid FROM
(SELECT (CASE WHEN date_due IS NULL THEN date_due ELSE date END) AS chosen_date,* FROM invoice_invoice) as t1;
アイデアは、特定の状況で、私はむしろ、いくつかの状況でdate_due
列ではなくdate
列を使用したいということは主ですdate_due
はオプションなので、私はときどきdate
をフォールバックとして使用し、計算された列chosen_date
を作成して残りのクエリを変更する必要がない場合があります。
if(use_date_due):
sum_qs = sum_qs.extra(select={'chosen_date': 'CASE WHEN date_due IS NULL THEN date ELSE date_due END'})
else:
sum_qs = sum_qs.extra(select={'chosen_date':'date'})
sum_qs = sum_qs.extra(select={'year': 'EXTRACT(year FROM chosen_date)',
'month': 'EXTRACT(month FROM chosen_date)',
'is_paid':'date_paid IS NOT NULL'})
しかし、私は「問題:ここで
は、私は本当に、私はextra
と一緒に行った方法を適切にベースAPIを使用してヌルテストにより参照することができませんでした、私はこれをエミュレートで行った最初の刺しました2番目のクエリを実行すると、chosen_date
列が存在しないというエラーが表示されます。私は後で計算された列(annotate()
呼び出しのようなもの)を使用しようとしたときに同様のエラーが発生しましたが、計算された列が "ベース"の列とどのように異なるかについてドキュメントには何も見つかりませんでした。誰にもこれについての洞察はありますか?
(以前のバージョンは明らかに、論理上の欠陥があったので(他に支店を忘れて編集したPythonコード)。まだ動作しません)あなたの特定にはいくつかの回避策here'reまあ
私は単純なままにして、生のクエリを使用します。彼らがそこにいるのはそれです。 –