Hieronder is een manier die werkt in Django pre 3.2, met behulp van annotate
(die helaas ook de kleine hack nodig heeft om een output_field
in te stellen , ook al wordt de waarde niet gebruikt).
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')
In Django 3.2+ kun je blijkbaar gebruik maken van alias
in plaats van annotate
Dit werkt omdat wat een tuple wordt genoemd, eigenlijk een afkorting is voor een Rijconstructor
, d.w.z. (col_a, col_b)
is hetzelfde als ROW(col_a, col_b)
Het bovenstaande is gebaseerd op de informatie in dit ticket