По-долу е даден начин, който работи в Django преди 3.2, като се използва annotate
(което също за съжаление се нуждае от лек хак за задаване на output_field
, въпреки че стойността не се използва).
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')
В Django 3.2+ очевидно можете да използвате alias
вместо annotate
Това работи, тъй като това, което се нарича кортеж, всъщност е стенограма за Конструктор на ред
, т.е. (col_a, col_b)
е същото като ROW(col_a, col_b)
Горното се основава на информацията в този билет