Dưới đây là một cách hoạt động trong Django pre 3.2, sử dụng annotate
(Rất tiếc, điều này cũng cần một chút hack khi đặt output_field
, ngay cả khi giá trị không được sử dụng).
from django.db.models import F, Func, TextField
col_a_col_b = Func(F('col_a'), F('col_b'), function='ROW', output_type=TextField())
col_a_col_b_from = Func(col_a_value, col_b_value, function='ROW')
filtered_queryset = queryset \
.annotate(col_a_col_b=col_a_col_b) \
.filter(col_a_col_b__gt=col_a_col_b_from) \
.order_by('col_a', 'col_b')
Trong Django 3.2+, bạn dường như có thể sử dụng alias
thay vì annotate
Điều này hoạt động vì những gì được gọi là tuple, thực sự là viết tắt của Công cụ tạo hàng
, tức là (col_a, col_b)
giống với ROW(col_a, col_b)
Trên đây là dựa trên thông tin trong vé này