Tôi đang cố gắng để sử dụng API queryset django để bắt chước các truy vấn sau đây:Làm thế nào tôi có thể nhận được các yếu tố tính toán của một bảng trong một queryset 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;
Ý tưởng là chủ yếu mà trong những tình huống nhất định, tôi muốn sử dụng các cột date_due
chứ không phải là date
cột trong một số tình huống, nhưng điều đó, vì date_due
là tùy chọn, đôi khi tôi phải sử dụng date
làm dự phòng và tạo cột được tính chosen_date
để không phải thay đổi phần còn lại của truy vấn.
Dưới đây là một đâm đầu tiên tôi đã làm tại bắt chước này, tôi đã không thể thực sự thấy làm thế nào để đúng cách do các kiểm tra null với các api cơ sở vì vậy tôi đã đi với 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'})
Nhưng vấn đề tôi m có khi tôi chạy truy vấn thứ hai, tôi gặp lỗi về cách cột chosen_date
không tồn tại. Tôi đã có lỗi tương tự sau này khi cố gắng sử dụng cột được tính toán (như từ trong số annotate()
cuộc gọi), nhưng không tìm thấy bất kỳ điều gì trong tài liệu về cách cột được tính khác với cột "cơ sở". Có ai có bất cứ cái nhìn sâu sắc về điều này?
(mã python thay đổi nội dung bởi vì phiên bản trước đã có một lỗ hổng luận rõ ràng (quên chi nhánh khác). Vẫn không hoạt động)
Tôi sẽ đơn giản và sử dụng truy vấn thô. Đó là những gì họ đang có cho. –