我正在尝试使用django的queryset API来模拟以下查询:
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;
Run Code Online (Sandbox Code Playgroud)
这个想法主要是在某些情况下,我宁愿在某些情况下使用date_due列而不是date列,但是,因为date_due是可选的,我有时必须使用date作为后备,并创建一个计算列chosen_date,而不必更改其余查询.
这是我在模仿这个时做的第一次尝试,我无法真正看到如何正确地使用基础api进行null测试,所以我选择了extra:
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 …Run Code Online (Sandbox Code Playgroud)