Django `output_type` для конструкторов строк PostgreSQL
В рамках некоторого пользовательского кода пагинации на основе курсора я выражаю следующий SQL, который сравнивает конструкторы кортежей/строк
WHERE (col_a, col_b) > (%s, %s)
ORDER BY col_a, col_b
используя Django ORM, и конкретно используя Func
с alias
, аналогично этому ответу
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
.alias(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')
Похоже, что для Func
требуется output_type
, иначе возникает исключение:
Expression contains mixed types. You must set output_field
Кажется немного странным использовать TextField
для этого, но это работает, и я не вижу ничего лучше.
Есть ли более подходящий output_type
для использования, или способ избежать необходимости устанавливать его?