A continuación se muestra una forma que funciona en Django pre 3.2, usando annotate
(que lamentablemente también necesita el pequeño truco de configurar un output_field
, aunque no se utilice el valor).
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')
En Django 3.2+ aparentemente puedes usar alias
en lugar de annotate
Esto funciona ya que lo que se conoce como tupla, en realidad es una abreviatura de Constructor de filas
, es decir, (col_a, col_b)
es lo mismo que ROW(col_a, col_b)
Lo anterior se basa en la información de este ticket