我试图使用Django的查询集API效仿以下查询:我怎样才能在Django的queryset表的计算元素?
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
不必须改变查询的其余部分。
这里曾是第一个尝试我在模仿这个做到了,我无法真正看到如何正确由于与基础API空测试,所以我用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 IS NOT NULL'})
但是这个问题我有m是当我运行第二个查询,得到如何的chosen_date
列不存在错误。我有后来当试图使用计算列(如从内部annotate()
电话)类似的错误,但没有发现有关列计算如何从“基地”的人不同的文档中的任何东西。有没有人有这方面的见解?
(编辑Python代码,因为以前的版本有明显的逻辑漏洞(忘了else分支)仍不能正常工作)
我会保持简单并使用原始查询。这是他们在那里。 –